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)
任何帮助将不胜感激.
即使它涉及提取特定标签和内容到新文件也没关系.
您可以将要转到的标签作为参数传递
示例脚本
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)
你可以使用一个奇怪的技巧!
您可以在辅助批次中转到标签,而无需在辅助批次中调用它!
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)