Thursday, September 25, 2008

Batch File Programming Part-3

The PAUSE Command: Freezing Time
Say you create a batch file which shows the Directory Listing of a particular folder(DIR) before performing some other task. Or sometimes before deleting all files of a folder, you need to give the user time to react and change his mind. PAUSE, the name says it all, it is used to time out actions of a script.

Consider the following scenario:
REM This Batch program deletes *.doc files in the current folder.
REM But it gives the user to react and abort this process.

@ECHO OFF

ECHO WARNING: Going to delete all Microsoft Word Document
ECHO Press CTRL+C to abort or simply press a key to continue.

PAUSE
DEL *.doc
Now when you execute this batch program, we get the following output:

C:\WINDOWS>a.bat

WARNING: Going to delete all Microsoft Word Document

Press CTRL+C to abort or simply press a key to continue.
Press any key to continue . . .

The batch file program actually asks the user if he wishes to continue and gives the user the option to abort the process. Pressing CTRL+C cancels the batch file program(CTRL+C and CTRL+Break bring about the same results)

^C

Terminate batch job (Y/N)?y
After this you will get the DOS prompt back.

HACKING TRUTH: Say you have saved a batch file in the c:\name directory. Now when you launch command.com the default directory is c:\windows and in order to execute the batch file program stored in the c:\name directory you need to change the directory and go to c:\name.This can be very irritating and time consuming. It is a good practice to store all your batch programs in the same folder. You can run a batch file stored in any folder(Say c:\name) from anywhere(even c:\windows\history) if you include the folder in which the batch file is stored (c:\name)in the AUTOEXEC.BAT file, so that DOS knows which folder to look for the batch program.

So simply open c:\autoexec.bat in Notepad and append the Path statement to the
following line[c:\name is the folder in which all your batch files are stored.]:

SET PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;C:\name

Autoexec.bat runs each time at startup and DOS knows each time, in which

directory to look for the batch files.

Parameters: Giving Information to Batch Programs

To make batch programs really intelligent you need to be able to provide them with parameters which are nothing but additional valuable information which is needed to ensure that the bath program can work efficiently and flexibly.

To understand how parameters work, look at the following script:

@ECHO OFF
ECHO First Parameter is %1
ECHO Second Parameter is %2
ECHO Third Parameter is %3

The script seems to be echoing(printing) messages on the screen, but what do the strange symbols %1 , % 2 etc stand for? To find out what the strange symbols stand for save the above script and go to DOS and execute this script by passing the below parameters:

C:\windows>batch_file_name abc def ghi

This batch file produces the following result:

C:\windows>batch_file_name abc def ghi

First Parameter is abc
Second Parameter is def
Third Parameter is ghi

The first line in the output is produced by the code line:

ECHO First Parameter is %1

Basically what happens is that when DOS encounters the %1 symbol, it examines the original command used to execute the bath program and look for the first word (argument) after the batch filename and then assigns %1 the value of that word. So one can say that in the ECHO statement %1 is replaced with the value of the first argument. In the above example the first word after the batch file name is abc, therefore %1 is assigned the value of this word.

The %2 symbol too works in the similar way, the only difference being that instead of the first argument, DOS assigns it the value of the second argument, def. Now all these symbols, %1, %2 are called replaceable parameters. Actually what happens is that %1 is not assigned the value of the first argument, but in fact it is replaced by the value of the first argument.

If the batch file command has more parameters than what the batch file is looking for, then the extras are ignored. For example, if while executing a batch file program , we pass four arguments, but the batch file program requires only 3 parameters, then the fourth parameter is ignored.

To understand the practical usage of parameters, let's take up a real life example. Now the following script requires the user to enter the name of the files to be deleted and the folder in which they are located.

@ECHO OFF
CD\
CD %1
DEL %2

This script can be called from the DOS prompt in the following way:

C:\windows>batch_file_name windows\temp *.tmp

In a single script we cannot use more that nine replaceable parameters. This means that a particular batch file will have replaceable parameters from %1 to %9.Infact there is a tenth replaceable parameter, the %0 parameter. The %0 parameter contains the name of the batch file itself.

HACKING TRUTH: Say you want to execute a batch file and once the procedure of execution is complete, want to leave DOS and return to Windows, what do you do?
The EXIT command can be used in such situations. So simply end your batch file
with the EXIT command.

EXIT

In the next post we will see some more concepts of Batch File Programming.

No comments: