如何为 FOR 循环中的每个命令获取 ERRORLEVEL?

How to get ERRORLEVEL for each command in FOR LOOP?

我正在使用 windows 批处理文件比较来自 2 个文件夹的文件列表。它打印结果是否 PASS/FAIL.

当前工作批处理文件:

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

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

PASS
FAIL
PASS

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

echo %ERRORLEVEL%

0

我的要求

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

我的预期输出

0
1
0

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

假设 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 & command2

Use to separate multiple commands on one command line. Cmd.exe runs the first command, and then the second command.