在Windows批处理文件中,我正在使用一个可选参数,允许调用者跳转到批处理文件的中间并从那里继续。
例如:
if [%1] neq [] (
echo Starting from step %1
goto %1
if %errorlevel% neq 0 goto error
)
:step1
:step2
...
goto end
:error
echo Error handler
...
:end
如果提供的参数不是有效标签,则批处理文件会立即退出并显示错误系统找不到指定的批处理标签。
有没有办法让我处理这个错误并执行我的错误处理程序块,或者继续执行整个批处理文件,好像没有提供参数一样?
答案 0 :(得分:8)
您可以尝试在定位goto目标的批处理中使用findstr:
findstr /r /i /c:"^:%1" %0>nul
if errorlevel 1 goto error
这有点像黑客,但应该有用。
答案 1 :(得分:3)
call :label
吐出错误在重定向stderr时没有吐出错误(谢谢,Johannes),并且似乎没有改变错误级别,但继续批处理文件。您可以在标签后设置一个变量,以指示执行是否达到了那么远。
@echo off
call :foo 2>nul
echo %errorlevel%
:bar
echo bar
产量
C:\>test.cmd The system cannot find the batch label specified - foo 1 bar C:\>
答案 2 :(得分:1)
我可能会这样做。
ECHO Starting from %1
IF "%1" == "step1" GOTO :step1
IF "%1" == "step2" GOTO :step2
IF "%1" == "step3" GOTO :step3
IF "%1" == "step4" GOTO :step4
ECHO %1 is not valid label name
答案 3 :(得分:0)
goto :label || (
echo my error handler
)
答案 4 :(得分:-1)
我认为Windows批处理文件不支持任何错误处理(if errorlevel...
除外)。您需要验证传递的值是goto
之前的有效标签。
如果可能,我会建议使用PowerShell,这是一种更丰富的语言,并包含基于异常的错误处理。