Batch files are plain text files with the extension .bat. They are executable, and contain commands. They are DOS based, and as such, will open up a command prompt screen when run.
Common commands used are:
cd <directory name> | change directory (folder) |
move <file name> <destination> | moves file to destination |
del <file name> | deletes file |
rd <directory name> | emoves directory |
md <directory name> | makes directory |
call <executable file name> | runs program |
echo <string> | outputs string to standard output (screen) |
dir | outputs contents of current directory |
They are useful for simple things, like copying of files for back up, or changing file
extensions.
cd prog copy *dat \backup\*.bak
This script changes to the directory prog, then copies all files (* is a wildcard) with the extension .dat to the directory backup, and changes the extension to .bak.
Comments are added by putting REM in front of the line you wish to become a comment.
Flow Control
Like VBScript, batch file scripting has basic flow control structures. These structures are also commands. More information about each command can usually be found by entering I? after the command at a DOS prompt.
Branching
This script runs an ftp script to download the file. If it is successful then Done will be displayed, otherwise an error message will be displayed. It uses the IF and GOTO commands. Errorlevel is a special variable that is set every time a program ends execution, normally with the value 0 if there were no errors.
@ at the start of a line means that that line is not echoed to the screen when the batch file is run. Setting ECHO to be OFF means that none of the lines after turning ECHO OFF will be echoed to the screen.
: at the start of a line defines a label in the scripted, that can be jumped to using GOTO.
@ECHO OFF ftp -s : download, ftp IF terrorlevel% == 0 GOTO log echo An error has occurred GOTO end :log echo Done :end
Looping
For loops are available in batch file scripting. This for ioop counts from 9 to 0, incrementing by -1 at each step, and echos the number that the count is currently at.
FOR /L %%a IN (9, -1, 0) DO ECHO %%a
Variables
Variables in batch files are of the type string (except errorlevel, which is special and of the type byte). They are set using the SET command, and can be used by enclosing the variable name in % signs, as shown in the following example:
SET myVariable=Anything ECHO %myVariable%
Anything after the equal sign is assigned to the variable.
There are however a few exceptions; variables in for loops are preceded by %% when setting and reading, and input variables are preceded by % when reading, rather than being enclosed.
Input Arguments
A batch file can take any number of input arguments. These arguments become input variables, and are numbered from %0 to %9. %0 is the name of the batch file that was run. To make available more input arguments, the SHIFT command can be used, which shifts all values down by one, so that %0 takes the value of % 1, and so on until %9 become the next argument which was previously unavailable. Input variables are read only.
Enter this script into a text file in notepad. Save it as shifting.bat
@ECHO 1 @ECHO %0 @SHIFT @ECHO %0 @ECHO %1
This batch file takes two arguments.
Run it by going to the Command Prompt, changing to the location you saved it and entering
shifting first second
the output will be:
first
shifting
first
second
Be careful when echoing input variables, because if you input on or off (both of which ECHO recognises) you may get the commands echoed to the screen when it is not wanted, and ECHO will not echo either of those words.
Output Redirection
The output programs run from batch files can be saved to a file instead of being written to the screen. This is known as output redirection.
echo Save this in a new file > newfile.txt echo Append this to the file >> newfile.txt dir | more
Use > to create a new file (or overwrite an existing file).
Use>> to append to an existing file.
Use | to pass the output to another program.
Input Redirection
Input redirection is similar to output redirection, except that it will cause the contents of a file to become the input arguments of a command.
date < currentdate.txt time < currenttime.txt
Running VBScript from Batch Scripts
It is possible to launch any program from a batch file, and so VBScripts can also be launched by running CScript. This is useful when you need to do things that are too complicated in a batch file.
CALL CScript.exe moreProcessing.vbs