我有一个批处理文件,它只加载了复制和 xcopy 命令,如果其中任何一个失败,我需要跳出复制到 goto 标签,但是每次复制后都必须检查错误级别会非常不方便。
我怀疑这可能是不可能的,但是有没有一种方法可以让我进行大量的复制/xcopys 并在最后检查错误级别是否曾经超过零?
我有一个批处理文件,它只加载了复制和 xcopy 命令,如果其中任何一个失败,我需要跳出复制到 goto 标签,但是每次复制后都必须检查错误级别会非常不方便。
我怀疑这可能是不可能的,但是有没有一种方法可以让我进行大量的复制/xcopys 并在最后检查错误级别是否曾经超过零?
您可以定义一个变量以用作简单的“宏”。节省了很多打字,而且看起来也不错。
@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
您可以将动作包装在子例程中;
@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