从Windows批处理文件中的无效GOTO命令中恢复

时间:2009-05-07 14:12:51

标签: batch-file

在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

如果提供的参数不是有效标签,则批处理文件会立即退出并显示错误系统找不到指定的批处理标签

有没有办法让我处理这个错误并执行我的错误处理程序块,或者继续执行整个批处理文件,好像没有提供参数一样?

5 个答案:

答案 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,这是一种更丰富的语言,并包含基于异常的错误处理。