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



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

我怀疑这可能是不可能的,但有没有一种方法可以让我进行大量的复制/xcopies,并在最后检查错误级别是否超过零?

您可以将变量定义为一个简单的"宏"。节省了大量的打字,而且看起来也不错。

@echo off
setlocal
set "copy=if errorlevel 1 (goto :error) else copy"
set "xcopy=if errorlevel 1 (goto :error) else xcopy"
%copy% "somepathfile1" "location"
%copy% "somepathfile2" "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 "somepathfile1" "location"
%ifNoErr% copy "somepathfile2" "location"
%ifNoErr% xcopy /s "sourcePath*" "location2"
rem etc.
exit /b
:error
rem Handle your error

您可以将操作封装在子例程中;

@echo off
setlocal enabledelayedexpansion
set waserror=0
call:copyIt "copy", "c:xxxaaa.fff",  "c:zzz"
call:copyIt "xcopy /y", "c:xxxaaa.fff",  "c:zzz"
call:copyIt "copy", "c:xxxaaa.fff",  "c:zzz"
call:copyIt "copy", "c:xxxaaa.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

相关内容

  • 没有找到相关文章

最新更新