home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC/CD Gamer UK 10
/
PCGAMER10.bin
/
shware
/
cheet
/
install.dat
/
1ATCHTIP.TXT
< prev
next >
Wrap
Text File
|
1995-05-07
|
9KB
|
235 lines
~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
` ───────────────