增强版Avrumi Sherman 处理STDERR 和 STDOUT:
D:\>dir ERROR 1>log.txt 2>&1 & type log.txt
Datenträger in Laufwerk D: ist DATA
Volumeseriennummer: 4653-A096
Verzeichnis von D:\Projekte\UDG_TMP\build-deploy
Datei nicht gefunden
所以它会在屏幕上显示STDTOUT(第一行)和STDERR(最后一行)和日志文件。
要在批处理文件中使用,只需像 Avrumi Sherman 那样做,但使用 single & 来捕获 ERROR 情况:
D:\>set logFile=log.txt
D:\>set tmpLog=tmp.txt
D:\>set logCmd=1^>%tmpLog% 2^>^&1 ^& type %tmpLog% ^& type %tmpLog%^>^>%logFile%
现在您可以像 logCmd 一样使用 logCmd 变量;)
注意第一个dir 和第二个rmdir 的错误消息显示在屏幕上以及出现在日志文件中:
D:\>echo START %logCmd%
START
D:\>dir DIRECTORY %logCmd%
Datenträger in Laufwerk D: ist DATA
Volumeseriennummer: 4653-A096
Verzeichnis von D:\
Datei nicht gefunden
D:\>mkdir DIRECTORY %logCmd%
D:\>dir DIRECTORY %logCmd%
Datenträger in Laufwerk D: ist DATA
Volumeseriennummer: 4653-A096
Verzeichnis von D:\DIRECTORY
26.08.2020 17:50 <DIR> .
26.08.2020 17:50 <DIR> ..
0 Datei(en), 0 Bytes
2 Verzeichnis(se), 68.391.989.248 Bytes frei
D:\>rmdir DIRECTORY %logCmd%
D:\>rmdir DIRECTORY %logCmd%
Das System kann die angegebene Datei nicht finden.
D:\>echo STOP %logCmd%
STOP
在批处理文件的末尾,您可以/应该删除%tmpLog%。这里%logFile%的内容使用上面的例子:
START
Datenträger in Laufwerk D: ist DATA
Volumeseriennummer: 4653-A096
Verzeichnis von D:\
Datei nicht gefunden
Datenträger in Laufwerk D: ist DATA
Volumeseriennummer: 4653-A096
Verzeichnis von D:\DIRECTORY
26.08.2020 17:50 <DIR> .
26.08.2020 17:50 <DIR> ..
0 Datei(en), 0 Bytes
2 Verzeichnis(se), 68.391.989.248 Bytes frei
Das System kann die angegebene Datei nicht finden.
STOP