Windows批处理文件包含所有错误级别

时间:2012-02-14 14:56:04

标签: windows batch-file xcopy errorlevel

我有一个批处理文件,它只是加载了复制和xcopy命令,如果其中任何一个失败我需要跳出复制到goto标签,但是每次检查后都要检查错误级别是非常不方便的单一副本。

我怀疑这可能是不可能的,但有没有办法可以做一大块copys / xcopys并在最后检查错误级别是否超过零?

2 个答案:

答案 0 :(得分:2)

您可以定义一个变量以用作简单的“宏”。节省了很多打字,看起来也不错。

@echo off
setlocal
set "copy=if errorlevel 1 (goto :error) else copy"
set "xcopy=if errorlevel 1 (goto :error) else xcopy"

%copy% "somepath\file1" "location"
%copy% "somepath\file2" "location"
%xcopy% /s "sourcePath\*" "location2"
rem etc.
exit /b

:error
rem Handle your error

修改

这是一个更通用的宏版本,可以与任何命令一起使用。请注意,宏解决方案明显快于使用CALL。

@echo off
setlocal
set "ifNoErr=if errorlevel 1 (goto :error) else "

%ifNoErr% copy "somepath\file1" "location"
%ifNoErr% copy "somepath\file2" "location"
%ifNoErr% xcopy /s "sourcePath\*" "location2"
rem etc.
exit /b

:error
rem Handle your error

答案 1 :(得分:1)

您可以将动作包装在子程序中;

@echo off
setlocal enabledelayedexpansion
set waserror=0

call:copyIt "copy", "c:\xxx\aaa.fff",  "c:\zzz\"
call:copyIt "xcopy /y", "c:\xxx\aaa.fff",  "c:\zzz\"
call:copyIt "copy", "c:\xxx\aaa.fff",  "c:\zzz\"
call:copyIt "copy", "c:\xxx\aaa.fff",  "c:\zzz\"

goto:eof

:copyIt
    if %waserror%==1 goto:eof 
    %~1 "%~2" "%~3"
    if !ERRORLEVEL! neq 0 goto:failed
    goto:eof

:failed
   @echo.failed so aborting
   set waserror=1