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

Windows 如何为for循环中的每个命令获取ERRORLEVEL?,windows,batch-file,cmd,errorlevel,Windows,Batch File,Cmd,Errorlevel,我正在使用windows批处理文件比较两个文件夹中的文件列表。无论通过/失败,它都会打印结果 当前工作批文件: for /F "tokens=*" %%f in (list.txt) do compare Folder1\%%f.png Folder2\%%f.png PASS 0 FAIL 1 PASS 0 0 1 0 如果有3个文件,则运行此命令后的输出如下所示: PASS FAIL PASS SETLOCAL EnableDelayedExpansion for /F "token

我正在使用windows批处理文件比较两个文件夹中的文件列表。无论通过/失败,它都会打印结果

当前工作批文件:

for /F "tokens=*" %%f in (list.txt) do compare Folder1\%%f.png Folder2\%%f.png
PASS
0
FAIL
1
PASS
0
0
1
0
如果有3个文件,则运行此命令后的输出如下所示:

PASS
FAIL
PASS
SETLOCAL EnableDelayedExpansion
for /F "tokens=*" %%f in (list.txt) do compare Folder1\%%f.png Folder2\%%f.png > NUL & echo !ERRORLEVEL!
ENDLOCAL
如果我在这里回显%ERRORLEVEL%,它将返回0,因为for循环运行正常

echo %ERRORLEVEL%

0
我的要求

0
1
0
而是在FOR循环中回显每个命令的结果

我的预期产出

0
1
0

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

假设失败会更改
错误级别
,请使用
&
为每个命令回显
错误级别

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

for /F "tokens=*" %%f in (list.txt) do compare Folder1\%%f.png Folder2\%%f.png
PASS
0
FAIL
1
PASS
0
0
1
0
我假设通过/失败是
compare
实用程序的输出。要隐藏此输出,请使用重定向
NUL
,如下所示:

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

for /F "tokens=*" %%f in (list.txt) do compare Folder1\%%f.png Folder2\%%f.png
PASS
0
FAIL
1
PASS
0
0
1
0
发件人:

&:command1和command2

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


这是行不通的,因为:1。你需要
!错误等级
获取迭代的错误级别;否则,返回读取整个命令行时出现的ErrorLevel;2.防止返回非零错误级别,必须改用
@对不起,我疏忽了。我已经更新了答案并添加了文档。谢谢你的指点,我试过了。获得以下输出:通过!错误等级!失败!错误等级!通过!错误等级@不安全,然后你忘了启用延迟扩展显然。。。