如何在FOR LOOP中为每个命令获取ERRORLEVEL?

时间:2017-09-18 18:20:54

标签: windows batch-file cmd errorlevel

我正在使用Windows批处理文件比较来自2个文件夹的文件列表。它打印结果是否通过。

当前工作批处理文件:

for /F "tokens=*" %%f in (list.txt) do compare Folder1\%%f.png Folder2\%%f.png

如果有3个文件,运行此命令后的输出将如下所示:

PASS
FAIL
PASS

如果我在这里回显%ERRORLEVEL%,它将返回0,因为for循环运行良好。

echo %ERRORLEVEL%

0

我的要求

改为在FOR循环中回显每个命令的结果。

我的预期输出

0
1
0

如何更改批处理文件以实现此目的?

1 个答案:

答案 0 :(得分:2)

假设FAIL更改了ERRORLEVEL,请使用&为每个命令回显ERRORLEVEL

SETLOCAL EnableDelayedExpansion
for /F "tokens=*" %%f in (list.txt) do compare Folder1\%%f.png Folder2\%%f.png & echo !ERRORLEVEL!
ENDLOCAL

<强>输出:

PASS
0
FAIL
1
PASS
0

我假设PASS / FAIL是compare实用程序的输出。要隐藏此输出,请使用重定向>NUL,如下所示:

SETLOCAL EnableDelayedExpansion
for /F "tokens=*" %%f in (list.txt) do compare Folder1\%%f.png Folder2\%%f.png > NUL & echo !ERRORLEVEL!
ENDLOCAL

<强>输出:

0
1
0

来自documentation

  

&安培; :command1&amp;命令2

     

用于在一个命令行上分隔多个命令。 Cmd.exe运行   第一个命令,然后是第二个命令。