使用特定的goto命令启动批处理

时间:2012-10-25 12:30:54

标签: batch-file goto process.start

我想知道是否可以从另一批中启动特定goto函数中的批量精简?

因此,不只是启动另一个批处理文件,而且还有“母亲”批处理在“子”批处理中选择一个特定的goto选项?

4 个答案:

答案 0 :(得分:1)

只需拥有父/母批处理文件,并将参数传递给子批处理文件。

<强> mom.bat

@ECHO OFF
ECHO Here we go
CALL child.bat 3
PAUSE

<强> child.bat

@ECHO OFF

IF "%1"=="1" Goto 1
IF "%1"=="2" Goto 2 
IF "%1"=="3" Goto 3

EXIT

:1

 ECHO 1!
 PAUSE
 EXIT

:2

 ECHO 2!
 PAUSE
 EXIT

:3

 ECHO 3!
 PAUSE
 EXIT

当母批处理文件将参数 3 传递给子批处理文件时,此示例应回显 3!

答案 1 :(得分:1)

是的,但这是一个黑客攻击。

通常,您可以通过调用批处理文件中的一些帮助来完成此操作。

<强> main.bat

call second.bat :theFunction

* second.bat

goto %1

...
:theFunction

黑客使用了一个功能错误,你只需要与second.bat中相同的标签。 只有在没有call

的情况下启动second.bat时它才有效

<强> main.bat

call :theFunction
echo back in main
exit /b

:theFunction
second.bat 
echo back in the func in main, this line will never reached
exit /b This line will also never reached

当second.bat返回时,它将返回到main.bat中call之后的行

答案 2 :(得分:1)

1.bat

call 2.bat /c goto :this
call 2.bat /c call :that

2.bat

if "%1"=="/c" shift & shift & %2 %3
goto :eof

:this
echo This!
goto :eof

:that
echo That!
goto :eof

编辑:我原来的帖子最接近正确。但我已经纠正了我的错误。

我双向移动以将%1和%2移到左侧,将任何其他变量传递到%1和%2位置。然后我执行%2和%3,因为在完成执行/解释行之前,移位的效果不会生效。

答案 3 :(得分:0)

在您正在调用的批处理文件中,将其放在顶部

if not %1=="" goto :%1

在用于调用它的批处理文件中

call b.bat labelname

显然,这取决于您尝试做什么,但基本功能有效。