windows command(13):GOTO :label

goto.png

goto命令,跳转命令。

基本语法

1
2
3
4
5
goto label
rem some cmd
:label
rem cmd of lable

跳转到标签行,并继续执行之后的语句。标签必须以:开头作为标签的指示。
标签名只可以使用常量,而不能使用变量。

条件 if或switch/case

condition using goto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
set /p a=choose:
if "%a%" == "A" goto CaseA
if "%a%" == "B" goto CaseB
if "%a%" == "C" goto CaseC
goto default
:CaseA
echo "execute A"
echo a=%a%
goto end
:CaseB
echo "execute B"
goto end
:CaseC
echo "execute C"
goto end
:default
echo "nothing execute"
:end

注意:CaseA之后,如果不加goto end则会继续执行:CaseB之后的语句。

循环 Loop

loop using goto cmd
1
2
3
4
5
6
7
@echo off
set index=0
set max=5
:loop
set /a index+=1
echo %index%
if %index% neq %max% goto loop

相当于

loop using for
1
2
3
4
set init=0
set step=1
set max=5
for /L %%i in (%init%,%step%,%max%) do echo %%i

不过使用goto更加灵活,理论上for能实现的循环goto都能实现。

dead loop
1
2
3
:loop
dir
goto loop

goto :EOF

直接跳转到文件结尾。

Reference:

help goto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
将 cmd.exe 定向到批处理程序中带标签的行。
GOTO label
label 指定批处理程序中用作标签的文字字符串。
标签必须单独一行,并且以冒号打头。
如果命令扩展被启用,GOTO 会如下改变:
GOTO 命令现在接受目标标签 :EOF,这个标签将控制转移到当前
批脚本文件的结尾。不定义就退出批脚本文件,这是一个容易的
办法。有关能使该功能有用的 CALL 命令的扩展描述,请键入
CALL /?。