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

时间:2010-06-21 21:43:56

标签: windows batch-file

以下代码始终将0显示为errorlevel,但是当复制命令在for循环命令之外完成时,它将返回非零错误级别。

for /f "usebackq delims=" %%x in (`copy x y`) do (
    set VAR=%%x
)
ECHO Errorlevel = %ERRORLEVEL%
ECHO VAR = %VAR%

是否可以获取for循环执行的复制命令的错误级别?

2 个答案:

答案 0 :(得分:5)

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

@echo off

setlocal EnableDelayedExpansion

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

答案 1 :(得分: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的实际值,而不是输入循环之前的值。

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