A batch file is a file that contains
a number of DOS commands, each of which could be run individually from the command
prompt. By putting them into a batch file, they can be run as a group by simply
running the batch file. Note that the commands execute in the order they appear
in the batch file, and that anything that causes a command to halt will also
halt the batch file.
You create a batch file by using an ASCII text editor, such as
DOS EDIT, or Windows Notepad. When you have created the batch file, you save
it with a file name, and give it the extension *.bat. Note that you must not
use a name that is the same as any DOS commands or any other program or utility
you are likely to run. If you use a DOS command name, trying to run your batch
file will not work because the DOS command will execute first. If your name
matches some other program or utility, you may never be able to run that program
again because your batch file will run before the program runs. So pick something
that is not likely to match any command name or program file name.
Virtually all internal and external commands can be used in a
batch file. The few exceptions are the commands that are intended only for configuration
which are used in the CONFIG.SYS file. Examples of these include BUFFERS, COUNTRY,
When you create a batch file, you are beginning to write a program,
essentially. DOS batch files may not have the power of a structured programming
language, but they can be very handy for handling quick tasks. Because this
is a form of programming, let us begin with learning some good habits. The number
one good habit for any programmer to learn is to put comments in the program
that explain what the program is doing. This is a very good thing to do, but
you need to be careful not to fool the operating system into trying to “execute”
your comments. The way to avoid this is to place REM (short for Remark) at the
beginning of a comment line. The OS will then ignore that line entirely when
it executes the program, but anyone who looks at the “source code”
in the batch file can read your comments and understand what it is doing. This
is also a way to temporarily disable a command without deleting it. Just open
your batch file for editing, and place the REM at the beginning of the line
you want to disable. When you want to re-enable that command, just open the
file for editing and remove the REM and the command will resume functioning.
This technique is sometimes referred to “remarking out” or “commenting
out” a command.
Batch files to save time
About 7 or 8 years ago, I was at a technology conference for college
professors, and at the end of the conference we needed to quickly make about
40 floppy disks, each with an identical set of about 15 files. There are various
ways of doing this, such as using DISKCOPY or COPY commands, but I wanted to
do this as quickly and efficiently as possible. So I sat down at the computer,
which was running DOS, and quickly copied the 15 files into a temporary directory
on the hard drive. I could have then opened EDIT, but to be even faster I entered
it directly from the console as follows:
C:>\copy con 1.bat
copy c:\temp\*.* a:
Let’s go through this to see what I did. The first line says to
“copy” from the “console” and store it in a file called
“1.bat”. The console in this case means the keyboard, sort of. It
is just taking whatever I type and entering it into a file.
The second line is the single command in my batch file. It copies
all of the files in the directory C:\Temp to the floppy disk in the A: drive.
The third line is holding the Control key while typing “Z”,
called a Control-Z. This is the End-of-file marker, and tells the OS I am through
entering text into this file.
The fourth line is not anything I typed. It is the OS responding
to me that it had copied my file.
I could then view this file, either using the TYPE command or
by opening it in EDIT, and I would see the single line “copy c:\temp\*.*
a:”. If I opened it in EDIT I could then add more commands or whatever
I wanted to do with it. But in this case I didn’t want to do anything else.
Once I had created this file, all I had to do was feed in a floppy,
hit the “1″ key, then the ENTER key, and the batch file would copy
everything. As soon as one disk had received its contents, pop it out, put in
a fresh disk, hit the “1″ key, then ENTER, etc. I had the 40 floppy
disks done in not much more than 10 minutes. In this case, I used the batch
file to automate a repetitive process and save me some keystrokes.
Batch files to automate tasks
Another use for a batch file is to clear out your temporary directories.
This trick works great in Windows, which uses batch files just like DOS. Create
a batch file like this:
With these two commands, you can clean out two directories that
might otherwise gradually accumulate a lot of temporary files. Create the batch
file, and stick a shortcut to it in your Startup folder, and these directories
will be cleaned out automatically every time you boot Windows. If you want to
be a little more conservative, and you worry that you might delete something
important, alter your commands like this:
Now you will only delete files with the *.tmp extension, and by
definition those files are safe to delete.
Batch files for multiple commands
To really tap the power of batch files, you need to use multiple
commands. Here is an example from the Windows 95 installation CD-ROM:
rem Get the name of the WINDOWS directory
if “%WINDIR%”==”" goto NOWINDIR
rem See if the netibmcc.inf file exists
if NOT EXIST %WINDIR%\INF\NETIBMCC.INF goto NOFILE
rem Rename the file
if EXIST %WINDIR%\INF\NETIBMCC.ORG del %WINDIR%\INF\NETIBMCC.ORG
ren %WINDIR%\INF\NETIBMCC.INF NETIBMCC.ORG
echo %WINDIR%\INF\NETIBMCC.INF renamed to NETIBMCC.ORG
echo fixibmcc: No NETIBMCC.INF file found in %WINDIR%\INF
echo fixibmcc: No WINDIR environment variable was found
This file, by the way, is in \drivers\netlan\ibmtkpcm\, and is
called fixwin95.bat. Let’s see what it is doing.
Line 1 turns off the echo. Echo is what displays the commands
on the screen as they are executed, so turning it off means you will not see
what is going on as this file executes.
Lines 2-4 are comments to tell you what this section of the file
is doing. In this case it is looking for the name of your Windows directory.
For most people this would be C:\Windows, but you can change it. Mine is C:\Win95,
for instance, because I frequently use dual boot machines.
Line 5 is the command that is looking for the name of the directory.
If it does not find a name, it will jump down to the section called NOWINDIR.
If it does find a name, it will keep going with the commands in order.
Lines 6-8 are also comments that explain that the next section
will look for a file named netibmcc.inf, which it expects to find in your Windows
directory, in the INF folder.
Line 9: If it does not find it, it will jump down to the NOFILE
section. If it does find it, it will keep going through the commands in order.
Lines 10-12, comments that it will now rename the file.
Line 13 begins a slightly more complex combination. It looks for
a file named NETIBMCC.ORG, and if it finds such a file, it deletes it.
Line 14 takes the file NETIBMCC.INF, and renames it to NETIBMCC.ORG.
Line 15 uses the echo command to display a message on the screen.
Line 16, it is then done, and jumps to the end.
Line 17 begins the NOFILE section. The batch file would have jumped
here if the file NETIBMCC.INF had not been found where the batch file expected
to find it. In this case, it uses the echo command to display an appropriate
error message on the screen, then jumps to the end.
Line 20 begins the NOWINDIR section. The batch file would have
jumped here if the Windows directory had not been found. In this case, it uses
the echo command to display an appropriate error message on the screen, then
jumps to the end.
Line 23: This is the end of the batch file, and it stops running
This is an example of a moderately complex batch file that uses
excellent technique in its documentation. Note how each section has a REM section
that explains what is going on. Also, note how the writer used extra blank REM
lines above and below each remark to set it off from the rest of the batch file.
These are not needed in any sense, but they make it more readable for a person
who is trying to follow what the batch file does.