home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 2 / HACKER2.BIN / 074.COLUM05.TXT < prev    next >
Text File  |  1993-07-30  |  18KB  |  426 lines

  1.      Batch Files 101
  2.  
  3.      By Ken Johnson, Chicago Computer Society
  4.  
  5.      This month's column will look at Batch files.  We'll introduce
  6.      batch files, how they work, and the batch "language".  Next month
  7.      we'll put it all together and look at some practical batch files
  8.      that use the techniques discussed here.
  9.  
  10.      A batch file is simply a text file that contains DOS commands
  11.      and/or programs to run.  Batch files can easily be identified by
  12.      their ".BAT" file extension.  To execute a batch file, you simply
  13.      enter the name of the file (without the .BAT).  DOS will look at
  14.      each line in the file and execute the command or program it finds
  15.      there  -- just as if you had typed them in yourself.
  16.  
  17.      You probably are familiar with at least one batch file, AUTOEXEC.BAT.  
  18.      This is the batch file that DOS looks for (and executes) every time 
  19.      you boot up the computer.  You can use AUTOEXEC.BAT to load TSR 
  20.      programs, set your search path and DOS prompt, execute a DOS shell 
  21.      or menu program, or otherwise to configure the computer the way you 
  22.      want.  But most PC users have several other batch files they 
  23.      constantly use.
  24.  
  25.      Why use batch files?  Because they can save you time and effort. If 
  26.      you type a series of commands (or one long command) repeatedly, 
  27.      create a batch file to do the typing for you.  This makes batch 
  28.      files particularly useful to new users, since they can execute 
  29.      programs without having to remember all the appropriate DOS commands 
  30.      or program switches.  Batch files also can make it easier to perform 
  31.      repetitive jobs like backing up your hard disk.  If you know that 
  32.      you can simply enter BKUP to do a backup, rather than having to 
  33.      remember a long and complicated sequence of commands, you're more 
  34.      likely to do it!
  35.  
  36.                            Creating a Batch File
  37.  
  38.      Since batch files simply contain text, there are several ways to
  39.      create them.  The simplest and easiest is probably to use a text
  40.      editor that saves it's files as ASCII text.  This means that the
  41.      file contains no hidden formatting codes, just straight text.  A
  42.      popular shareware text editor is QEdit, which can be downloaded
  43.      from the CCS Bulletin Board as QEDIT21.ZIP.
  44.      
  45.      You also can use your favorite word processor to create batch
  46.      files.  Since most word processors insert formatting codes, make
  47.      sure to save your file as "standard text" or "DOS text".  For
  48.      example, in WordPerfect you would select Text In/Out (CTRL-F5),
  49.      then DOS Text (1), then Save (1).
  50.      
  51.      For short batch files, you can create the file directly from the
  52.      keyboard.  You use a special version of the COPY command to copy
  53.      text directly from the keyboard into the file.  The DOS reserved
  54.      word CON (or CONsole) means the keyboard; what you are doing is
  55.      using the keyboard as your "source file" for the copy.  On the
  56.      DOS command line, enter: 
  57.      
  58.      COPY CON filename.BAT
  59.      
  60.      where filename is the name of your batch file (don't forget the
  61.      .BAT file extension!).  The cursor will drop down a line, and you
  62.      can start typing.  Press Enter after each line, then press the F6
  63.      key when done.  This will insert DOS' end-of-file marker (a
  64.      "^Z"), and you'll see the "1 file(s) copied" message.  
  65.      
  66.      For example, let's create a batch file called DIRAB.BAT that will
  67.      clear the screen then display the directory of both floppy
  68.      drives.  Enter the following:
  69.      
  70.           COPY CON DIRAB.BAT ─┘
  71.           CLS ─┘
  72.           DIR A: ─┘
  73.           DIR B: ─┘
  74.           ^Z ─┘
  75.  
  76.      The "─┘" indicates that you press Enter at the end of each
  77.      line. 
  78.      Remember that you don't type the "^Z" at the end; you enter it by
  79.      pressing the F6 key.  
  80.  
  81.      While COPY CON is a quick way to create a batch file, it isn't
  82.      exactly user friendly in operation.  You enter one line at a time
  83.      in sequential order, and after you press Enter you cannot go back
  84.      and edit a line.  If you make a mistake, you can abort the copy
  85.      by holding down the Ctrl key and pressing the C key (Ctrl-C),
  86.      then trying it again.
  87.  
  88.      After creating a batch file, you should reread it to make sure it
  89.      contains all the commands you want, and in their proper form. 
  90.      The easiest way is to TYPE the file to the screen:
  91.  
  92.      TYPE DIRAB.BAT
  93.  
  94.  
  95.                              Running the Batch file
  96.  
  97.      To execute a batch file, just enter it's name without the .BAT
  98.      extension:
  99.  
  100.      C>DIRAB
  101.  
  102.      A batch file will execute one line at a time.  The commands
  103.      execute sequentially (top to bottom), though you can "jump
  104.      around" in a batch file with the GOTO statement discussed below. 
  105.      If you want to stop a batch file, hold down the Ctrl key and
  106.      press the C key or the Break key (Ctrl-C or Ctrl-Break).  DOS
  107.      will ask "Terminate batch job (Y/N)?".  Type Y and you'll return
  108.      to the DOS prompt.
  109.  
  110.      Remember that all batch files have to have the .BAT file
  111.      extension.  Make sure that you do not give your batch file the
  112.      same name as a DOS command or an executable file (a .COM or .EXE
  113.      file).  When you enter something on the DOS command line, DOS
  114.      first checks to see if what you entered is one of it's internal
  115.      commands (such as DIR, COPY, TYPE, etc.).  If DOS doesn't find an
  116.       internal command that matches what you typed, it then checks for
  117.      a COM file with the same name, then an EXE file with the name,
  118.      and finally a BAT file with the name (in that order).  So if I
  119.      called the batch file above DIR, it would not execute since DOS
  120.      would assume I wanted it's own DIRectory command when I typed in
  121.      "DIR".
  122.      
  123.  
  124.                              Batch Parameters
  125.  
  126.      One powerful feature of batch files is the ability to include
  127.      parameters that are passed to the batch file when it executes. 
  128.      This capability makes it possible to create flexible and reusable
  129.      batch files that can accept input from the user and act
  130.      accordingly.
  131.      
  132.      Then DOS executes a batch file it examines the command line,
  133.      looking for delimiters such as spaces or commas that divide what
  134.      you've entered into discrete elements.  DOS then assigns these
  135.      elements to up to ten variables, or parameters.  These parameters
  136.      are in the form %N, where N is a number from 0 to 9.  As a batch
  137.      file executes, each occurrence of %N is replaced by the
  138.      corresponding string from the DOS command line.  %0 corresponds
  139.      to the first thing you typed, which is always the name of the
  140.      batch file itself.
  141.      
  142.      For example, suppose the batch file EDCOPY.BAT contains:
  143.      
  144.           WP %1
  145.           XCOPY %1 %2
  146.  
  147.      When you execute the DOS command:
  148.  
  149.           C>EDCOPY BUDGET.DOC B:
  150.  
  151.      each %1 is replaced with BUDGET.DOC and each %2 is replaced by B:
  152.  
  153.           WP BUDGET.DOC
  154.           XCOPY BUDGET.DOC B:
  155.  
  156.  
  157.                            The Batch Subcommands
  158.  
  159.      The Batch programming "language" is made up of just a handful of
  160.      commands, which are sometimes called subcommands.  The language
  161.      isn't very refined, but it can be very powerful once you
  162.      understand how it works.  Like other computer languages, the
  163.      batch subcommands allow you conditionally to execute parts of the
  164.      program, loop through commands, use variables with changeable
  165.      values, and call other batch programs.  The batch subcommands are
  166.      CALL, ECHO, FOR, GOTO, IF, PAUSE, REM, SHIFT, and @.
  167.  
  168.      
  169.      ECHO Subcommand
  170.  
  171.      ECHO can be used to display a message to the user or tells DOS
  172.      whether to display normal messages during the execution of batch
  173.      file.  The forms of ECHO are:
  174.      
  175.           ECHO [message]
  176.           or
  177.           ECHO [ON or OFF]
  178.  
  179.      ECHO OFF -- Halts the display of the DOS prompt and keeps DOS
  180.      from displaying the lines of the batch file as they are executed.
  181.  
  182.      But, ECHO OFF does not prevent the DOS command's or program's
  183.      output from being displayed.  
  184.  
  185.      ECHO ON -- Restores normal display activity.  This is the
  186.      default.
  187.  
  188.      ECHO message -- Displays the indicated message.  You can fancy up
  189.      the screen by including borders or boxes as part of the message.
  190.  
  191.      ECHO entered by itself will display the ECHO status (ON or OFF).
  192.  
  193.      One batch file trick is to use the CLS (CLear Screen) command
  194.      immediately after ECHO OFF to get an uncluttered screen.
  195.  
  196.      The @ Operator
  197.  
  198.      Unfortunately, when the batch file executes ECHO OFF, the ECHO
  199.      OFF command itself echoes to the screen.  But if you are using
  200.      DOS 3.3 or later, you can prevent the ECHO OFF from displaying by
  201.      including an @ sign at the beginning of the command like so: 
  202.      @ECHO OFF.
  203.  
  204.      The "@" can be prefixed to any DOS command, program name, or
  205.      batch file name.  It makes the command silent -- the command
  206.      itself is not echoed to the screen but the output will be
  207.      displayed.  You can think of @ as a one-line-only version of ECHO
  208.      OFF.
  209.  
  210.      REM Subcommand
  211.  
  212.      REM (REMark) is used to add comments to a batch file.  The
  213.      REMarks may or may not be displayed on the screen, depending on
  214.      whether ECHO is ON or OFF.  REMarks are handy ways of reminding
  215.      yourself what the batch file does, as well as documenting your
  216.      program for others.  The form of the statement is:
  217.      
  218.      REM [remark]
  219.  
  220.      The remark can be up to 123 characters in length.  If ECHO is ON,
  221.      the remark will be displayed on the screen; if ECHO is OFF, it
  222.      will not be seen.  Since a displayed REMark will include the DOS
  223.      prompt as well as the REM subcommand, REM is most often used with
  224.      ECHO OFF.  If you need to display text to the user, the ECHO
  225.      command provides a "cleaner" way to do so.
  226.      
  227.  
  228.      PAUSE Subcommand
  229.  
  230.      PAUSE momentarily stops the batch file execution, displays a
  231.      message, and wait for the user to press any key.  Whenever you
  232.      ECHO a message to the screen, you'll probably want to include a
  233.      PAUSE immediately after the ECHO to give the user time to read
  234.      it.  You also can use PAUSE to tell the user how to terminate the
  235.      program with a CTRL-Break before it starts a critical operation. 
  236.      The form of the statement is:
  237.      
  238.      PAUSE 
  239.  
  240.      The program stops and DOS prompts with "Press a key when ready. . ."  
  241.  
  242.      Let's look at a sample program to delete backup files, which
  243.      allows the user to stop the program before the deletions takes
  244.      place:
  245.  
  246.      ECHO OFF
  247.      ECHO I'm about to delete all .BAK files.  Press Ctrl-Break to stop.
  248.      PAUSE
  249.      DEL *.bak
  250.  
  251.  
  252.      GOTO Subcommand
  253.  
  254.      This powerful command causes DOS to begin executing a different
  255.      part of the batch file.  Execution will jump to another part of
  256.      the file identified by a unique label.  This label must start
  257.      with a colon and must be the first thing on the line.  The form
  258.      of the GOTO statement is:
  259.  
  260.      GOTO line_label
  261.  
  262.      Execution restarts at the batch file line that contains the
  263.      "line_label".  You don't have to include the colon with the label
  264.      on the GOTO statement.  Labels are not case sensitive, and you
  265.      can have labels that are not matched with GOTO statements (DOS
  266.      treats them as REMarks).
  267.  
  268.      Since batch files are executed sequentially top to bottom,
  269.      frequently you'll use GOTO to jump over some commands, loop
  270.      backward to reexecute some commands, or jump to the end of the
  271.      program.  In complex batch programs its common to end with an
  272.      ":END" label and include several GOTO END statements to jump
  273.      there when appropriate. 
  274.  
  275.      Let's look at some examples:
  276.  
  277.      :AGAIN                        <-- this is the line label
  278.      ECHO This is an infinite loop!!
  279.      ECHO Press Ctrl-Break to stop . . .
  280.      GOTO AGAIN                    <-- this causes the loop 
  281.  
  282.      Here's another:
  283.  
  284.      ECHO OFF
  285.      IF "%1" == "" GOTO noname
  286.      ECHO File information on file %1
  287.      DIR %1
  288.      GOTO end
  289.      :noname
  290.      ECHO You must supply a file name!
  291.      ECHO Please try again . . .
  292.      :end
  293.  
  294.      In this last example you are using GOTO to handle an error
  295.      message.  The batch file expects the user to enter a filename. 
  296.      If nothing is entered, then the parameter "%1" is blank and the
  297.      file jumps to the ":noname" label, displaying a message.  If a
  298.      file name is entered, then the program displays directory
  299.      information for that file.  But then the program has to jump over
  300.      the error message, since it is clearly not appropriate if a name
  301.      was given.  The "GOTO end" does this.
  302.  
  303.      IF Subcommand
  304.  
  305.      IF will execute or skip a batch command, depending on one of
  306.      three conditions.  The capability to have conditional execution
  307.      is what can give batch files real power.  The forms of the IF
  308.      statement are:
  309.  
  310.      IF [NOT] EXIST filespec command
  311.           or
  312.      IF [NOT] string1 == string2 command
  313.           or
  314.      IF [NOT] ERRORLEVEL number command
  315.  
  316.      The NOT modifier specifies that the "command" is to be executed
  317.      if the condition is false.  "command" is any DOS command, batch
  318.      file, or program name.
  319.  
  320.      "EXIST filespec" is true when a file with the filename and
  321.      extension exists on the specified (or default) drive.  A wildcard
  322.      filespec makes the condition true if any file matches the
  323.      wildcard.
  324.  
  325.      "string1 == string2" is true when string1 and string2 are
  326.      identical.  This test is case sensitive, and notice you use two
  327.      equals signs.  One important use of this form of IF is processing
  328.      of the replaceable parameters:
  329.  
  330.      IF "%1" == "A:" GOTO doa
  331.      IF "%1" == "a:" GOTO doa
  332.      IF "%1" == "B:" GOTO dob
  333.      IF "%1" == "b:" GOTO dob
  334.      IF "%1" == "" GOTO noparm
  335.  
  336.      (Sting comparisons will result in a syntax error if either string
  337.      is blank, so enclose both strings in quotes.)
  338.  
  339.      "ERRORLEVEL number" is true when the DOS environmental variable
  340.      ERRORLEVEL is equal to or greater than the number specified. 
  341.      ERRORLEVEL is really a poor name, because it does not necessarily
  342.      indicate an error.  It is a way for programs to communicate to
  343.      DOS (or your batch file) what happened when they ran.  "Return
  344.      code" might be a better name; different ERRORLEVEL values can
  345.      indicate successful and unsuccessful completion, and for
  346.      unsuccessful completion what error occurred.
  347.  
  348.      Some examples of the various ways you can harness the power of
  349.      IF:
  350.  
  351.      IF NOT EXIST d:customer.db copy c:\pdoxdata\customer.db d:
  352.  
  353.      Copies CUSTOMER.DB from the PDOXDATA subdirectory on the C: drive
  354.      to drive D: but only if it is not already on the D: drive.
  355.  
  356.      IF "%1" == "LTRS" cd c:\wp51\ltrs
  357.      IF "%1" == "ltrs" cd c:\wp51\ltrs
  358.  
  359.      Sets the default directory to \WP\LTRS if the first batch
  360.      parameter is "LTRS" or "ltrs".
  361.  
  362.      BACKUP c:\*.* a: /s
  363.      IF ERRORLEVEL 3 goto TROUBLE
  364.  
  365.      If the BACKUP command terminates with an exit code of 3 or
  366.      higher, control will branch to the label :TROUBLE.
  367.  
  368.      The last three batch subcommands are a little more advanced, but
  369.      they will give you an idea of the powerful capabilities of the
  370.      batch language:
  371.  
  372.      FOR . . .IN . . .DO Subcommand
  373.  
  374.      The FOR subcommand allows a DOS command to be repeated multiple
  375.      times.  On each repeat, a batch variable gets set to a filename
  376.      from a specified list.  The format of the statement is:
  377.  
  378.      FOR %%x IN (list) DO command
  379.  
  380.      %%x -- is the variable name.  "x" is a letter, A-Z.
  381.  
  382.      list -- is a sequence of filenames, separated by commas or
  383.      spaces.  The parenthesis are required.  A wildcard filespec works
  384.      like a list of all filenames that match the wildcard.
  385.  
  386.      command -- is any DOS command or program name (except a FOR
  387.      command)
  388.  
  389.      For each item in "list", the variable %%x takes on the value of
  390.      that item when the command is executed.  The idea is to use %%x
  391.      in the "command" to modify the command action on each repetition.
  392.  
  393.      For example:
  394.  
  395.      FOR %%d IN (a,c,d) DO dir %%d:*.*
  396.  
  397.      displays directories of drives A, C, and D sequentially.  This
  398.      would be the same as entering: 
  399.  
  400.      dir a:*.*
  401.      dir c:*.*
  402.      dir d:*.*
  403.  
  404.  
  405.      SHIFT Subcommand
  406.  
  407.      The SHIFT statement changes each batch parameter to the value of
  408.      the next higher one.  In other words, each parameter moves down
  409.      one:  %1 becomes %0, %2 becomes %1, et cetera.  SHIFT allows a
  410.      batch file to have more than 9 parameters -- you simply SHIFT
  411.      them down to act upon them.
  412.  
  413.  
  414.      CALL Subcommand
  415.  
  416.      The CALL subcommand is available starting with DOS 3.3 and is
  417.      used to execute one batch file from inside another.  When the
  418.      second batch file is finished, control resumes in the first at
  419.      the statement immediately following the CALL command.
  420.  
  421.      We've introduced batch files and looked at the batch language. 
  422.      In next month's Beginner's Column we'll see these Batch
  423.      techniques and commands in action.  We'll look at some useful
  424.      batch files and see how they work, and how you might modify them
  425.      for your use.
  426.