Goto - DOS/Command Prompt Reference
Jumps execution to the line with the specified label name in the batch file.
Syntax
goto <label-name>
<label-name> |
Specifies the label name in the line to jump to. ‘:’ character is not necessary in <label-name>. [MS-DOS, Windows 95/98/Me] For the label name, only the first 8 characters are used. Execution will jump to the first label matching with the first 8 characters. [Windows NT series][Extensions] By specifying ‘:EOF’ (one colon and EOF) to <label-name>, Goto will jump to the end of the batch file regardless of existing labels. This means that executing ‘goto :EOF’ will finish the batch file or subroutine (called by Call) process. Note that only this syntax requires a colon; otherwise Goto will try to jump to ‘EOF’ label. * In MS-DOS, Windows 95/98/Me, or the environment with Extensions disabled, ‘goto :EOF’ syntax cannot be used. ‘goto :EOF’ may not work unless Extensions are enabled by using Setlocal explicitly, so to make sure to finish the process instead of using ‘goto :EOF’, write the label in the last of the batch file explicitly and then jump to it, or call ‘exit /B’ for terminating. |
Details
This command is usually used with If for conditional processing. Normally batch files are processed line by line from the head, but Goto enables to skip lines or back to the previous line. When branching processes for condition, to skip ‘lines not to process’, Goto is necessary.
To define labels, write a ‘:’ (colon) on the beginning of the line, followed by the label name, as follows. (This is unlike the syntax of common programming languages.)
:MyLabel echo Reached to MyLabel
To jump to this label, write like this:
goto MyLabel
[Windows NT series][Extensions] Call command Extensions syntax can also be used to jump to the label, but Call can return back to the (almost) previous line by using Exit. For Goto there is no way to return back to the next line automatically, so you need to write another label to return back.
Samples
Sample 1 (Batch file)
@echo off echo Input any text and type Ctrl+Z then Enter. type CON > temp1.dat find "7" temp1.dat > NUL if errorlevel 1 goto NotFound echo The text has a lucky number. goto OnExit :NotFound echo The text was a regular string. :OnExit del temp1.dat
This is a little program to search for ‘7’ in the input text by using Find command exit code.
Sample 2 (Batch file)
@echo off setlocal enableextensions set COUNT=0 :MainLoop set /A COUNT="COUNT + 1" set /A P="COUNT %% 3" set /A Q="COUNT %% 5" if %P%%Q%==00 echo FizzBuzz & goto LoopCheck if %P%==0 echo Fizz & goto LoopCheck if %Q%==0 echo Buzz & goto LoopCheck echo %COUNT% :LoopCheck if %COUNT% LSS 30 goto MainLoop
[Windows NT series][Extensions] This is a sample of ‘Fizz Buzz’ displaying up to 30 by a batch file. This batch file has a finite loop consisting of Goto, If, and arithmetic syntaxes of Set, allowing to repeat a process between ‘MainLoop’ label and the next line of ‘LoopCheck’ label.
* This is just ‘a sample for Goto command’, meaning this is not the best program for ‘Fizz Buzz’. To make a finite loop using numbers, using ‘for /L’ may be suitable.
* The statements for setting values to ‘P’ and ‘Q’ in 7 to 8 lines use ‘%%’ instead of ‘%’ to calculate a remainder. Using ‘%%’ instead of ‘%’ is necessary for batch files. For more information about ‘%’ usage in batch files, see also ‘%’ page.