批处理文件如何在指定的标签上调用另一个批处理文件或调用并立即转到某个标签?

Chr*_*den 12 label batch-file call

我试图找出file1.bat如何在指定的标签上调用file2.bat.

我想我可以这样做:

File1.bat

:config
@echo off
:setvars
set labelmarker=labelmarker
call file2.bat
pause > nul
:EOF
Run Code Online (Sandbox Code Playgroud)

File2.bat

if %labelmarker%==labelmarker goto label4
:label1
echo it won't work...
goto EOF
:label2
echo it must work!
goto EOF
:label3
echo it didn't work...
goto EOF
:label4
echo it works!
goto EOF
:EOF
Run Code Online (Sandbox Code Playgroud)

这有效.但是我想从file1.bat调用bat和Label.是否可以使用控制字符或ascii代码或任何东西?像我试过的那样

call file2.bat | goto label4 - doesn't work
call file2.bat > goto label4 - doesn't work
call file2.bat @label4 - doesn't work
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

即使它涉及提取特定标签和内容到新文件也没关系.

Bal*_*i C 9

您可以将要转到的标签作为参数传递

示例脚本

First.bat

@echo off
set label=GOHERE
call Second.bat %label%
pause >nul
Run Code Online (Sandbox Code Playgroud)

Second.bat

@echo off
goto %1
echo This line should be skipped
:GOHERE
echo Jumped here
Run Code Online (Sandbox Code Playgroud)


jeb*_*jeb 8

你可以使用一个奇怪的技巧!
您可以在辅助批次中转到标签,而无需在辅助批次中调用它!

First.bat

@echo off
call :label
echo returned
exit /b

:label
second.bat
exit /b
Run Code Online (Sandbox Code Playgroud)

Second.bat

@echo off
echo Main of second.bat
exit /b

:label
echo This is second.bat at LABEL
exit /b
Run Code Online (Sandbox Code Playgroud)

OUTPUT

This is second.bat at LABEL
returned
Run Code Online (Sandbox Code Playgroud)

人们似乎没有理由为什么标签叫,也不知道为什么控制应该回到first.bat,作为第二批被称为没有CALL.
第一点的原因似乎是goto命令的内部代码.
可以解释第二点,因为在第一批文件中的标签之前有一个调用.
exit /b在second.bat直接返回的呼叫(第3行)first.bat不的调用second.bat在第7行

编辑:如何禁用奇怪的行为

如果你在second.bat它附加一个命令将不再隐式跳转到second.bat中的标签.

second.bat & rem将输出更改为 OUTPUT

Main of second.bat
returned
Run Code Online (Sandbox Code Playgroud)