~Basic Batch File Tips Using '%' Arguments in Batch Files - By Simon Burrows `If you've ever had the job of writing any but the simplest of `batch files before, you will have used arguments. Incorporating `these into such a batch file allows the user of the file to `specify one or more commands as well as the name of the .BAT file `at the Command Line. If you have never heard of arguments `before, or do not know how to use them, read on. This documents `contains a brief(ish) description of them and their uses :- ~`ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ `When using many of the utilities DOS comes with (eg, FORMAT.COM) `you must specify more than just the name of the file at the `command line. For example, when using FORMAT.COM, you may type `this to format a disk in drive A: to 3.5" HD :- ~FORMAT A: /F:1.44 `This is exactly the same for many batch files. `For example, many older games available must be installed to a `hard disk with the use of a Batch File installation program. You `may need to type something like this at the command line to `install a game on a disk in drive A: to a directory called `SOLITARE on drive C: :- ~INSTALL A: C:\SOLITARE `When we do this, each part of the command is called an argument. `Whenever there is a space (eg, in between A: and C:\SOLITARE) a `new argument begins. These arguments can also be called `variables. `Each argument, or variable, is remembered by your computer as a `'%' sign and a number. So, the separate parts of the example `above are named as follows :- ~`INSTALL A: C:\SOLITARE ` ³ ³ ³ ` ³ ³ ³ ~` %0 %1 %2 `The part called '%1' is the first argument even though it is `really the second, after '%0'. Most of the time you will never `use '%0', although, as you will see later in this text, it has `some uses. `If you are just using batch files, you needn't worry about these `'%' sign 'abbreviations' but they are an important part of the `writing of a batch file. `As an example, imagine you had a batch file which copies a file `from one disk to another. At the command line you specify where `the file is located at the moment and then its destination. For `example, you might type the following at the command line :- ~COPYIT A: C: `The batch file, COPYIT.BAT, would use DOS's Copy command to copy `the program. However, if you listed the file, it wouldn't just `read something like "COPY FILE.EXE A: C:" because this will `only copy the file from one set disk drive (A:) to another set `disk drive (C:). Instead, it would read something like this :- ~COPY FILE.EXE %1 %2 `If you loaded this batch file now, stating the two arguments at `the command line to specify where the file for copying is now, `and where you want it to go, (eg, COPYIT A: C:), your computer `will replace the '%1' in the batch file with the first argument, `and the '%2' with the second argument. This means that you could `use this same batch file to copy the file "FILE.EXE" regardless `which drive it is on and which drive you want it to be copied to. `For example, if you typed :- ~COPYIT F: Y: `...your computer would automatically replace the %1 in `COPYIT.BAT's listing with 'F:' and the %2 with 'Y:' so it would `copy the file called 'FILE.EXE' from a disk in drive F: to a disk `in drive Y: (Just as long as you had these drives available on `your PC, of course!) `You could incorporate the use of variables and the IF command to `display a help message to the user of the batch file. For `example, in our example of "COPYIT.BAT", you could make it so `that if your user specified the first variable as '/?' (by `typing "COPYIT /?") a message would be displayed describing what `the file "COPYIT.BAT" does. `To do this you might use the following batch file listing :- ~`IF "%1"=="/?" GOTO HELP ~`COPY FILE.EXE %1 %2 ~`GOTO END ~`:HELP ~`ECHO The file "COPYIT.BAT" will copy the file called "FILE.BAT" ~`ECHO from any drive to a destination of your choice. ~`ECHO. ~`ECHO Usage is as follows :-ECHO. ~`ECHO COPYIT [Location of "FILE.EXE] [Destination of "FILE.EXE] ~`:END `The top line of this is saying that if the user specifies the `first argument as '/?' (ie, by typing "COPYIT /?") then your `computer should go straight to the section of the batch file `called "HELP". This is the part directly after the ":HELP" line, `and has a series of 'ECHO' lines to display a text message. `However, if the user does not specify the first argument as '/?' `and instead types something like "COPYIT A: C:", then %1 will not `be '/?' so this first line will be ignored and it will go to the `next line. The next line, as described above, copies the file, `then, the line after that tells your computer to skip to the `section called "END" at the end of the file so it misses out the `unwanted help message. `So, if your user types "COPYIT X: Y:" the file "FILE.EXE" is `copied from disk X: to disk Y:, and if they type "COPYIT /?" the `following text-message is displayed :- ~`The file "COPYIT.BAT" will copy the file called "FILE.BAT" ~`from any drive to a destination of your choice. ~`Usage is as follows :- ~`COPYIT [Location of "FILE.EXE"] [Destination of "FILE.EXE"] `But what happens if your user doesn't specify any argument, and `instead loads the batch file by typing simply "COPYIT"? Well, if `this is the case then your computer will not know where the file `is and where to copy it to. In this eventuality you will need a `message displayed which tells the user that they have loaded the `file wrongly. This message might as well be the same as the one `displayed if they type "COPYIT /?" as this message (if your is `the same as mine, anyway) includes information on how to load `the file properly. `However, there's a problem. The ONLY way this message can be `displayed is if the file COPYIT.BAT is loaded with the '/?' `argument. Because of this, the only way to get the message to be `shown if no argument is specified is to make your computer reload `the batch file with the '/?' argument automatically. `To do this we need use of the '%0' argument mentioned at the `start of this document. Since '%1' stands for the first argument `after the filename, '%0' stands for the filename itself. This `means that you could put %0 into your batch file and the file `will reload when this figure is reached. `So, what we can do is say that if there is no '%1' specified, `then the batch file should be reloaded by the computer, this time `with the argument '/?', so that the message is displayed showing `the user how to use the batch file properly. By adding this feature to our batch file, it now reads :- ~`IF "%1"=="" %0 /? ~`IF "%1"=="/?" GOTO HELP ~`COPY FILE.EXE %1 %2 ~`GOTO END ~`:HELP ~`ECHO The file "COPYIT.BAT" will copy the file called "FILE.BAT" ~`ECHO from any drive to a destination of your choice. ~`ECHO. ~`ECHO Usage is as follows :- ~`ECHO. ~`ECHO COPYIT [Location of "FILE.EXE"] [Destination of "FILE.EXE"] ~`:END `The first line checks to see whether there are no arguments `specified. It does this by seeing whether '%1' equals nothing `("" means nothing) rather than whether it exists at all. If '%1' `does equal nothing, it carries out the rest of the line (the `"%0 /?" part) which tells your computer to reload the batch file `with '/?' as the one and only argument. Otherwise, it skips this `part and continues to line two. So with this batch file, there could be 3 outcomes :- `1. The file is loaded with the first argument as the curent drive ` of the file for copying, and the second as the file's ` destination. In this case, the file will be copied correctly. `2. The file is loaded with the first and only argument being ` '/?'. In this case, the text message is displayed quickly ` explaining the file and how to use it properly. `3. The file is loaded with no arguments. In this case, the same ` text message is displayed quickly explaining the file and how ` to use it properly. ~`Well, there you go then folks, have fun!.. ` ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ~` Simon Burrows ` ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ