例如,
@echo off
goto main
:main
echo Select:
echo 1) Goto label 1
echo 2) Goto label 2
set /p choice=
if %choice% == 1 goto label1
if %choice% == 2 goto label2
:label1
echo Will now direct you to label2
echo Press any key to go to label2
pause >nul
:label2 [PROBLEM HERE]
echo Type 'N' or 'E' and press Enter to go back to label1 or exit.
set /p choice2=
if %choice2% == N goto label1
if %choice2% == E exit
请忽略它上面写着'goto main'的部分,我知道没有必要,但我已经习惯了。
“问题在这里”表示我希望批处理返回到label1的部分,而不是实际键入代码以指定返回到以前的标签,因为有时我可能需要label1来工作去label2并且工作另一件事,然后再次回到label1继续其业务。
答案 0 :(得分:14)
goto
没有“返回”。
但您可以call
部分脚本:
@echo off
echo main program
call :label1
echo main program
call :label2
echo main program
pause
exit /b
:label1
echo subroutine
goto :eof
echo never reached
:label2
echo sub two
goto :eof
答案 1 :(得分:4)
不幸的是,您还没有说为什么您在所声称的职位上遇到了问题。
解决方案
@echo off
goto main
:main
echo Select:
echo 1) Goto label 1
echo 2) Goto label 2
set /p choice=
if %choice% == 1 goto label1
if %choice% == 2 goto label2
:label1
echo Will now direct you to label2
echo Press any key to go to label2
pause >nul
:label2
echo Press any key to go from label2 to label1
pause >nul
goto label1
似乎太明显了。
@echo off
goto main
:main
echo Select:
echo 1) Goto label 1
echo 2) Goto label 2
set /p choice=
if %choice% == 1 goto label1
if %choice% == 2 call :label2
:label1
echo Will now direct you to label2
echo Press any key to go to label2
pause >nul
:label2
echo Reached label2 - Press any key to go from label2 to label1
pause >nul
goto :eof
其中冒号 : eof 并且需要调用 : label2 (意思是'特殊标签文件结尾分别由CMD and
内部子程序`理解。
然而,有些人认为,到达某个标签会以与到达段落末尾相同的方式或}
或C
中的end;
来终止批处理例程。 Pascal
。它不是。批量只是收费到下一个顺序语句,如汇编程序。
我这样说是因为原始代码没有明显的终止方式 - 例如,在1
或2
之外的其他内容的条目上,它只会通过label1然后通过label2运行 - 如果label2返回到label1,那么你就有一个无限循环。
还有一项:如果您输入的字符串为set/p
,则说明输入的数据并不包含 Spaces 。克服这种情况的方法是"enclose the strings on both sides of the comparison operator in quotes"
- 即双引号'not single quotes'
如果用户只按 Enter ,则if %choice% == 1 goto label1
将被解释为{ {1}}(因为不会设置变量if == 1 goto label1
),这会产生语法错误。
哦 - choice
并不是变量的最佳名称(无论是逻辑的还是描述性的),因为它是标准choice
实用程序的名称。
在提示符下,尝试
CMD
这可能会给你关于获得呃选择的其他方法的想法......
答案 2 :(得分:0)
我并不完全清楚你想要什么,但听起来好像你正在寻找一个可以用call
@echo off
goto main
:main
echo Select:
echo 1) Goto label 1
echo 2) Goto label 2
set /p choice=
if %choice% == 1 goto label1
if %choice% == 2 goto label2
goto :eof
:label1
echo Will now direct you to label2
echo Press any key to go to label2
pause >nul
call :label2
goto :eof
:label2
echo Reached label2
goto :eof
答案 3 :(得分:0)
在分支和使用之前使用Set variable=label1
或Set variable=main
或Set variable=EOF
goto :%variable%
循环或重启,或退出。