批处理for循环执行的命令的错误级别

7
以下代码始终将错误级别显示为0,但当复制命令在for循环命令之外完成时,它返回非零错误级别。
for /f "usebackq delims=" %%x in (`copy x y`) do (
    set VAR=%%x
)
ECHO Errorlevel = %ERRORLEVEL%
ECHO VAR = %VAR%

在for循环中执行copy命令,是否有可能获取其错误级别(errorlevel)?

2个回答

5

它对我有用!只需要在DO括号中加入错误检查和一个包含复制命令的文本文件(7200行,例如: copy 2_97691_Scan.pdf O:\ Data \ Dev \ Mins \ PDFScan2 \ 2011 \ 4 \ 2_97691_Scan.pdf), 我可以运行以下批处理文件

@echo off

setlocal EnableDelayedExpansion

for /F "delims=" %%I in (CopyCurrentPDFs.txt) do (
%%I
if !errorlevel! NEQ 0 echo %%I>>errorcopy.txt
)

1
这里重要的部分是EnableDelayedExpansion - Tim Abell
1
警告:这是针对FOR /F 文件循环的解决方案,而不是原始问题中的FOR /F 命令循环。请参见:"ERRORLEVEL in FOR /F Command Loop Returns Unexpected Result" - srage

1
我假设你是在将文件从一个目录复制到另一个目录?如果是这样,你可以尝试使用以下方法:
@echo off

setlocal EnableDelayedExpansion

set ERR=0

for %%x in (x) do (

    copy %%x y
    set ERR=!errorlevel!

    set VAR=%%x
)
ECHO Errorlevel = %ERR%
ECHO VAR = %VAR%

需要延迟扩展来获取循环内实际的errorlevel值,而不是进入循环之前的值。

如果这不是您想要做的,请澄清您的目标。


我正在尝试解析可执行文件的输出(此处只是一个简单的示例),但我想知道该可执行文件是否返回了错误。 - Josh
好的。我不确定在不分离它们的情况下,您是否可以获取由for循环执行的命令的错误级别,也许其他人可以提供更好的答案。 - WildCrustacean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接