Introduction: Batch If Statements
If is one of the most important command in a batch file so I am making a tutorial devoted to the if command.
Step 1: If Statements
If statements are very useful and can be layer out in this form
If %variable% == "what variable should or can equal" [command]
You DO NOT have to use the goto command you can use any command so don't goto a lable just to echo text do this
If %var%==hello echo hi
To start something
If %var%==google start google.com
If %variable% == "what variable should or can equal" [command]
You DO NOT have to use the goto command you can use any command so don't goto a lable just to echo text do this
If %var%==hello echo hi
To start something
If %var%==google start google.com
Step 2: /I Remove Repetition
If %input% == y goto y
If %input% ==Y goto y
If %input% == n goto n
If %input% == N goto n
This code is boring long and should be simplified I can split this code to half size with the /I parameter.
If /I %input% == y goto y
If /I %input% == n goto n
The /I parameter is not case sensitive so y and Y are interpreted as the same thing. In this case it isn't as big of a deal but in long codes it can make a difference.
If %input% ==Y goto y
If %input% == n goto n
If %input% == N goto n
This code is boring long and should be simplified I can split this code to half size with the /I parameter.
If /I %input% == y goto y
If /I %input% == n goto n
The /I parameter is not case sensitive so y and Y are interpreted as the same thing. In this case it isn't as big of a deal but in long codes it can make a difference.
Step 3: If Not and Exist
The id command can check if a file exists don't exist and the same thing for seeing if a variable is defined.
IF EXIST "file.ext" echo found
Remember to prevent batch files from getting lost when a file has spaces in the name add quotes. The line above checks to see if file.ext exists alternatively you can use
IF NOT EXIST "file.ext" echo lost :(
To tell you if file.ext doesn't exist or you can use ELSE to check both
IF EXIST "file.ext" (
ECHO found
) ELSE (
ECHO lost frown
)
Note: using :( may break the code by using a parenthesis.
Now was variable %var% defined already? This can be done two ways checking if the variable was defined or comparing %var% to "" (nothing) and seeing if they are equal.
IF "%var%"=="" (SET var=value)
Or you can check to see if the variable is defined
IF NOT DEFINED var (SET var=value)
IF EXIST "file.ext" echo found
Remember to prevent batch files from getting lost when a file has spaces in the name add quotes. The line above checks to see if file.ext exists alternatively you can use
IF NOT EXIST "file.ext" echo lost :(
To tell you if file.ext doesn't exist or you can use ELSE to check both
IF EXIST "file.ext" (
ECHO found
) ELSE (
ECHO lost frown
)
Note: using :( may break the code by using a parenthesis.
Now was variable %var% defined already? This can be done two ways checking if the variable was defined or comparing %var% to "" (nothing) and seeing if they are equal.
IF "%var%"=="" (SET var=value)
Or you can check to see if the variable is defined
IF NOT DEFINED var (SET var=value)
Step 4: Comparisons
If statements use the following to determine if a number is _ than another number
EQU - equal
NEQ - not equal
LSS - less than
LEQ - less than or equal
GTR - greater than
GEQ - greater than or equal
So this can be used
IF (1) GEQ (5) echo "greater"
Alternatively the number may be encompassed by quotes.
Now how do we compare variables
Set var=hello
Set var1=Hello
If %var%==%var1% echo the same
This code sets the variables and then checks to see if they are the the same. The code will not be true because h and H aren't the same now switch that statement with
If /I %var%==%var1% echo the same
This will be true with the /I switch because it is no longer case sensitive.
EQU - equal
NEQ - not equal
LSS - less than
LEQ - less than or equal
GTR - greater than
GEQ - greater than or equal
So this can be used
IF (1) GEQ (5) echo "greater"
Alternatively the number may be encompassed by quotes.
Now how do we compare variables
Set var=hello
Set var1=Hello
If %var%==%var1% echo the same
This code sets the variables and then checks to see if they are the the same. The code will not be true because h and H aren't the same now switch that statement with
If /I %var%==%var1% echo the same
This will be true with the /I switch because it is no longer case sensitive.
Step 5: Parameters
Open cmd.exe and type color /? Or attrib +h nul.txt
Notice these commands have options /? For help and attrib allows for a file name if statements can let you do this
if /i "%~1"=="/?" (
Echo help section
Pause
Goto eof
)
This explained save it as help.bat open hold shift and right click in the same folder and open cmd type help /?
This code says if the first thing typed after the file name is /? Do what's in the parenthesis. Notice %~1 well what but the second thing I'm getting there.
if "%~2"=="" (
set /p var=Enter non-strict data
) else (
set "var=%~2"
)
So you just change %~1 to %~2 yes, but what about the rest of the code?
Let's say you don't run it from cmd you open it like a batch file the second thing the user types into cmd is not valid so it prompts the user. But it looks different from code one why all those parenthesis? The first one required /? To go some where this allows for a file path to be typed which isn't the same text every time.
Notice these commands have options /? For help and attrib allows for a file name if statements can let you do this
if /i "%~1"=="/?" (
Echo help section
Pause
Goto eof
)
This explained save it as help.bat open hold shift and right click in the same folder and open cmd type help /?
This code says if the first thing typed after the file name is /? Do what's in the parenthesis. Notice %~1 well what but the second thing I'm getting there.
if "%~2"=="" (
set /p var=Enter non-strict data
) else (
set "var=%~2"
)
So you just change %~1 to %~2 yes, but what about the rest of the code?
Let's say you don't run it from cmd you open it like a batch file the second thing the user types into cmd is not valid so it prompts the user. But it looks different from code one why all those parenthesis? The first one required /? To go some where this allows for a file path to be typed which isn't the same text every time.
Step 6: More Than Nine Parameters
Batch can handle up to nine parameters so file.bat /1 /2 /3 /4 /5 /6 /7 /8 /9 will work but what if you want to user /10 or more use shift
SET ONE=%~1
SET TWO=%~2
SET THREE=%~3
SET FOUR=%~4
SET FIVE=%~5
SET SIX=%~6
SET SEVEN=%~7
SET EIGHT=%~8
SET NINE=%~9
SHIFT
SHIFT
SHIFT
SHIFT
SHIFT
SHIFT
SHIFT
SHIFT
SHIFT
SET TEN=%~1
SET ELEVEN=%~2
So the first thing after the file name is set as %one% then use shift to reset parameters back to zero and restart so the tenth thing typed or shift shift shift ... %~1 is will take the tenth parameter ND set it to %ten%.
SET ONE=%~1
SET TWO=%~2
SET THREE=%~3
SET FOUR=%~4
SET FIVE=%~5
SET SIX=%~6
SET SEVEN=%~7
SET EIGHT=%~8
SET NINE=%~9
SHIFT
SHIFT
SHIFT
SHIFT
SHIFT
SHIFT
SHIFT
SHIFT
SHIFT
SET TEN=%~1
SET ELEVEN=%~2
So the first thing after the file name is set as %one% then use shift to reset parameters back to zero and restart so the tenth thing typed or shift shift shift ... %~1 is will take the tenth parameter ND set it to %ten%.