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

标签 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

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

最佳答案

假设 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.

关于windows - 如何为 FOR 循环中的每个命令获取 ERRORLEVEL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46285830/

相关文章:

windows - 如何判断应用程序是否被锁定或只是需要很长时间

windows - 使用 Puppet 更改 TrustedInstaller 拥有的注册表项的权限

batch-file - 防止使用 cmd 覆盖文件(如果存在)

windows - 批处理脚本循环变量

windows - 删除行(包括空行)

cvs - 在 CLI 中列出 CVS 模块内的所有标签

c - 如何从终端将字符传递给可执行文件?

windows - 如何在安装在 Windows 7 计算机上的报表服务器上部署报表?

python - 错误 : Could not build wheels for Kivy which use PEP 517 and cannot be installed directly

windows - WMIC.bat 文件无法正确导出/输出