advanced batch files iii
TRANSCRIPT
-
7/27/2019 Advanced Batch Files III
1/24
ADVANCED BATCH FILES III
Advanced III Preliminary
Read This First!
DEL-OLD.batDelete any Number
of Oldest Files
DKH.batWrite Batch Files
From the Command Line
DRT.batList Files by Type
LOC.batLocate Files
NOTE.batA Note Maker
(withDDNOTE.batandNOTET.bat)
SEQ.batCopy Files in Order
(IncludesPROJ-SEQ.bat)
TRAN.batTransfer Files Straight to
any Directory of Choice
PRELIMINARY
Here is a third set of advanced batch files. The explanation style will emulate that of the morecomplicated examples as seen in the first two sets. This will be done by first showing the batch file then
following it with an explanation and perhaps notes.
Because this is the third advanced page, it is assumed by now that you know the basics of batch filesand their commands, and are familiar with the utilities and updated DOS commands used in the previous
examples. They will not be explained further here. See theBatch File Basics and otherAdvanced Batch
Files sections if you need. Links to them are at the top and bottom of this webpage.
As always, the "DR" command is a batch file that runs an after-market directory program I use called
Color Directory. You may substitute DOS' "DIR" command with its switches set to your preferences.Also, it is assumed that you are placing all batch files into the "C:\BATCH" directory which is in your
path.
Finally, be aware that Doctor DOS will not be responsible for any problems resulting from the use ormis-use of anything presented here.
An advisory to non-Canadians: Some characters shown in some batch
files here may not be able to be reproduced on your system unlessthe Country Code is changed or you type them in as ASCII characters.Consult your text editor/word processor manual to see how to do the latter.
http://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#PRELIM%23PRELIMhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#OLD%23OLDhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#DKH%23DKHhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#DRT%23DRThttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#LOC%23LOChttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#NOTE%23NOTEhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#DDNOTE%23DDNOTEhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#DDNOTE%23DDNOTEhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#DDNOTE%23DDNOTEhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#NOTET%23NOTEThttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#NOTET%23NOTEThttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#SEQ%23SEQhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#PROJ-SEQ%23PROJ-SEQhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#PROJ-SEQ%23PROJ-SEQhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#TRAN%23TRANhttp://www.idcomm.com/personal/lorenblaney/#UTILITIEShttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#OLD%23OLDhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#DKH%23DKHhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#DRT%23DRThttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#LOC%23LOChttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#NOTE%23NOTEhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#DDNOTE%23DDNOTEhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#NOTET%23NOTEThttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#SEQ%23SEQhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#PROJ-SEQ%23PROJ-SEQhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#TRAN%23TRANhttp://www.idcomm.com/personal/lorenblaney/#UTILITIEShttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#PRELIM%23PRELIM -
7/27/2019 Advanced Batch Files III
2/24
EXCEPT FOR THE BATCH FILES THEMSELVES,
INFORMATION ON THESE BATCH FILE PAGES
MAY NOT BE REPRODUCED WITHOUT PERMISSION
FROM THE AUTHOR
THE BATCH FILES ARE FOR PERSONAL USE ONLY.
THEY MAY NOT BE SOLD OR OTHERWISE DISTRIBUTED.
THE BATCH FILES
DELETE OLDEST FILES
This batch file will allow you to delete any number of oldest files in a given directory, independently of
their dates. That is, you will not have to know or enter any date. It will simply select the oldest `n' files
and remove them. This batch file uses XSET and assumes it is in your C:\DOS directory.
DEL-OLD.bat:: DEL-OLD.bat:: Deletes the Oldest `n' Files::@ECHO OFF
SET LOOP=0
:LOOP
DIR /A-D /OD /B | C:\DOS\XSET /LINE 1 FILEDEL %FILE%
C:\DOS\XSET /MATH LOOP=%LOOP% +1IF NOT "%LOOP%" == "%1" GOTO LOOP
F:\BATCH\DRSET LOOP=
:END________
Explanation
The file begins by setting a DOS environmental value "%LOOP%". It then uses the DIR command to
ignore directories (/A-D) and get a list of the files in date order (/OD) in a bare format (/B). This is piped
to XSET which uses its "/LINE" switch to make an environment value (FILE) equal to the first line. That
first line is the oldest file in that directory.
Next, that value is used by DEL (Delete) to remove the actual file from the directory. Then XSET
increases the value of "%LOOP%" by one. Since it had been initially set to `0'. it is now equal to `1'.
Now, an "IF" statement is used to see if the new value of "%LOOP%" is equal to that typed at the
command line by yourself. If you wanted to delete five files, you would have typed "DEL-OLD 5". Since
the value of `1' is not equal to `5', the process is directed to the "LOOP" label and the procedure is
-
7/27/2019 Advanced Batch Files III
3/24
repeated until the oldest five files have been deleted. At that point, `5' will be equal to `5' so the delete
sequebce ends and the batch file gives a directory listing to show the results. Finally, the "%LOOP%"
value is removed from memory.
Usage
To delete the five oldest files, go to the desired directory, and simply type "DEL-OLD 5". If you type a
number greater than the total number of files in the directory, you will get some error messages, but the
deletion process will complete properly and the final directory listing will show that directory as being
empty.
Note that you may switch this batch file to being able to delete the newest `n' files by changing the
"/OD" DIR switch to "/O-D".
XSET may be obtained from -xset.tripod.com.
AUTO-BATCH and COMMAND RECALL
Have you ever just typed a series of commands - a series you have typed often - and thought: "I am
tired of typing this. I should place them into a batch file.", but never seem to get around to doing it? Well,
this next batch file will help with just that. As a bonus, it will allow recall of a given command or set of
commands.
This is all done via DOSKEY. That command came out in MS-DOS 5, but there are other similar
utilities available which could be used for a similar purpose as is about to be shown. The batch file also
requires CHOICE, which came out in MS-DOS 6. Again, similar utilities are available, but you will have
to re-write the batch to make them work as intended here.
A bonus to loading DOSKEY is that you can recall any command previously typed, up to the limit of
the buffer which keeps track of those commands. Although there will be more on this later, I will not go
into it too much. See your DOS manual or on-screen help. First, let's have a look at that batch file:
DKH.bat:: DKH.bat:: Saves DOSKEY History to a File:: Allows Previous Commands to be Viewed and Edited::@ECHO OFF
C:\DOS\DOSKEY /H > C:\BATCH\DK-HIST
ECHO.ECHO Edit DOSKEY History? `E'ECHO.
ECHO `Escape' ExitsECHO.
CHOICE /C:E NULIF ERRORLEVEL 2 GOTO END
http://xset.tripod.com/http://xset.tripod.com/ -
7/27/2019 Advanced Batch Files III
4/24
IF ERRORLEVEL 1 GOTO EDITGOTO END
:EDITC:\DOS\EDIT C:\BATCH\DK-HISTCLS
ECHO.ECHO Delete DOSKEY History?
ECHO.ECHO `Escape' Exits and Keeps DOSKEY History FileECHO.
CHOICE /C:D NULIF ERRORLEVEL 2 GOTO ENDIF ERRORLEVEL 1 GOTO DELETEGOTO END
:DELETEDEL C:\BATCH\DK-HIST
:END
________
Explanation
DOSKEY's "/H" switch is used to send the command history to the DK-HST.txt file. It will save all the
commands previously typed, up to the limit of the command buffer. Should you wish, you may increase
the size of this buffer to hold more commands. See DOSKEY help on screen or in your DOS manual.
Next, a choice to edit this file or not is displayed and the CHOICE command is then used to direct the
batch file to the appropriate section via GOTO commands. If ESCAPE is pressed, the batch file ends. If
`E' is pressed, the DK-HST.txt file is loaded into EDIT where one may eliminate all but those lines
required to make a new batch file.
After exiting EDIT, another CHOICE allows for deletion or not of the DK-HST.txt file. The batch file
then ends.
Usage
First, you must load DOSKEY via your AUTOEXEC.bat, preferably into upper memory. See your
DOS manual for how to do this. Then enter commands as usual so that they will be remembered by
DOSKEY. You then have a few things to consider when using the DOSKEY technique. If you simply
want to review the command buffer's entries, you may press "F7" and DOSKEY will show a list right at
the command line. However, if you wish to be able to scroll back & forth or need to edit the history file,
enter "DKH". The DOSKEY buffer's contents will be copied into a text file which will in turn be loaded
into EDIT. You may then peruse and/or edit any part of it at will. Be aware that if you had kept a previous
DKH.txt file, that it will overwritten when you run this batch file.
(Note that `
-
7/27/2019 Advanced Batch Files III
5/24
There are other DOSKEY features, but I won't get into them here because the main idea of "DKH" is to
be able to use it to do most of the writing of a batch file while seeing the results of the commands as they
are typed.
If you decide to keep some of the commands as a batch file, save only them under your proposed batch
file name. To do this, simply edit out any command which is not part of the intended batch file. Add a
title, some comments, and an "ECHO OFF" command, and you will have a basic batch file. Rename the
edited version as a batch file. Alternatively, you may cut or copy out the lines of commands you want,open a new file under the proposed batch file name and paste the cut or copied lines into it. Add the title,
comments, and "ECHO OFF" and anything else required. Then save it.
A shortcut may be used provided you don't want to keep any current history buffer. Pressing "ALT-F7"
before typing the commands you intend to use in the batch file, will clear the buffer. Then type the
commands you wish to use. The commands will be issued as you type them so you may see the results.
Afterwards, enter "DKH", and only those commands will appear "DK-HST.txt". Edit the file and add a
title, comments, etc.; then rename it as a batch file.
LIST FILES BY TYPE
Here is a simple batch file which will allow one to quickly list files of a given extension when in any
directory. This removes clutter from any listing and allows one to quickly peruse a specific file type. I
have geared this to the DOS "DIR" command instead of the Color Directory program I use. This is
because you have DIR but may not have "Color Directory". Using the latter program means the batch file
has to be written differently, and I did not want to confuse you when it came to using this batch file with
DIR.
DRT.bat:: DRT.bat:: Lists All or Specified .txt Files::@ECHO OFF
ECHO.
IF "%1" == "" C:\BATCH\DIR *.TXTGOTO END
SET C:\DOS\XSET=/UPPERC:\DOS\XSET SWITCH=%1
IF "SWITCH" == "/D" C:\BATCH\DIR *.TXT /O:DGOTO END
IF "SWITCH" == "/Z" C:\BATCH\DIR *.TXT /O:SGOTO END
IF NOT "%1" == "" C:\BATCH\DIR %1.TXT
:END
________
-
7/27/2019 Advanced Batch Files III
6/24
Explanation
First, a blank line is placed on screen via "ECHO." This separates the succeeding directory listing from
the prompt above. Next, if no parameter is issued with the batch file name at the command line, a
directory listing of all .txt (text) files is displayed with all information, and then the batch file ends.
However, if a parameter is issued, the batch file goes to the next lines. These use XSET - first to make
all parameters given at the command line be seen as upper case, then to set the variable called "SWITCH"to be equal to the parameter given at the command line. Now, when the IF statements are issued, no
matter whether the parameter is lower or upper case, it will be seen as upper case. This is done because
"IF" is case sensitive in many DOS versions. Making all given parameters be upper case means only
having to have one IF statement per parameter. So even if you were to type `/d', the IF statement for that
switch would be true because XSET has told it to be passed to IF as `/D'. If you don't want to use XSET,
simply issue one line for each case:
IF "SWITCH" == "/d" C:\BATCH\DIR *.TXT /O:DIF "SWITCH" == "/D" C:\BATCH\DIR *.TXT /O:D
So, the next two IF lines check to see if the parameter is `/D' or `/Z'. If it's `/D', the .txt files will belisted by ascending date order; if it's `/Z', the files are shown in ascending size order. After either, the
batch file ends. (To reverse the order, place a minus sign ( - ) in front of the date or size letter: /O:-D or
/O:-S.
Now, if it's neither, the last line is read. It will display the selected text file(s) as given at the command
line. This allows you to get a directory of one specific .txt file or by using the ` * 'or ` ? ' wild cards, all
those beginning with say, "READ" (DRT READ*). Once something is displayed, the batch file ends. If
no matching file(s) is found, a prompt will be shown to that affect.
Usage
Simply issue "DRT" to see all text files in the current directory. To see a specific one, issue "DRT (file
name)". Remember, wild cards ` * ' and ` ? ' are permitted. However, be sure to give the file name with no
dot or extension. The batch file fills that in for you.
To see all text files by date or size, issue "DRT /D" or "DRT /Z" I did not use "/S" for "size" because
DIR already uses "/S" to mean "subdirectories". I did not want to confuse users of this batch file by using
"/S" in this instance. Be aware, that the way this batch file is currently written will not sort specific file
names by date or size.
Now, take this batch file example further: By substituting a different last letter in the batch file name,
and substituting a different extension within the batch file itself, one may list any type of file wished. So,
now make a series of these batch files: DRC, DRD, DRE, DRH, DRZ, etc. You will be able to view a list
of .com, .doc, .exe, .htm, .zip, etc. files.
XSET may be obtained from -xset.tripod.com.
Locate Files Anywhere
On any Drive
http://xset.tripod.com/http://xset.tripod.com/ -
7/27/2019 Advanced Batch Files III
7/24
You have created a file but it went to some unintended directory, or you have simply forgotten where
some file resides. This batch file will allow you to find that file, provided you know at least the first part
of the its name. You may also use it to find file types anywhere on the drive.
LOC.bat
:: LOC.bat:: Locates Specified File Name:: Searches from the Root or Current Directory & Below:: Can Also Search a Specified Drive:: Wildcards may be Used in File Name:::: Use `/S' to Search Current Directory & Below::@ECHO OFF
SET XSET=/UPPERC:\DOS\XSET PARAMETER=%1IF "%PARAMETER%" == "ALL" GOTO ALL-DRIVE
IF "%PARAMETER%" == "C" GOTO SPEC-DRIVEIF "%PARAMETER%" == "D" GOTO SPEC-DRIVEIF "%PARAMETER%" == "E" GOTO SPEC-DRIVEIF "%PARAMETER%" == "/S" GOTO CURRENTIF NOT "%PARAMETER%" == "/S" GOTO ROOT
:ALL-DRIVEECHO.ECHO Searching all Drives for " %2 "ECHO.FOR %%D IN (C: D: E:) DO DIR %%D\%2 /B /P /SGOTO END
:SPEC-DRIVEECHO.ECHO Searching Drive %PARAMETER%: for " %2 "ECHO.DIR %1:\%2 /B /P /SGOTO END
:CURRENTXSET CUR-DIRECTORY DIRECHO.ECHO Searching %CUR-DIRECTORY% & Below for " %2 "ECHO.DIR %2 /B /P /SGOTO END
:ROOTECHO.ECHO Searching Current Drive for " %1 "ECHO.DIR \%1 /B /P /S
:ENDECHO.SET XSET=SET PARAMETER=SET CUR-DIRECTORY=
________
Explanation
-
7/27/2019 Advanced Batch Files III
8/24
This begins by using XSET to make any command line parameters be passed to the batch file as upper
case. This is to eliminate additional "IF" statements having to be used to cover lower-case entries. This
technique was seen and explained earlier on this page in DRT.bat.
The "IF" statements determine if you entered "ALL", a drive letter, a dot, or just a file name after the
batch file name. If you enter "ALL", the "ALL-DRIVE" section comes into play. A message is placed on
screen saying that all drives are being searched for the specified file. This section uses a FOR-IN-DO
(FOR) command to have DIR search for your file on each drive listed, from its root directory on down. Itessentially says: "FOR each Directory listed INside the Brackets, DO a DIR listing for each of those
Directories using the succeeding parameters and switches".
A blank line is placed on screen as a separator via the "ECHO." in the preceding line, and then "FOR"
has the "DIR" command display any matches in a "Bare" format via the "/B". That means just the file and
its path are seen. If the screen fills, DIR's `/P' parameter will pause after each screen full. This is done for
each drive listed.
However, if a specific drive letter was typed, the batch file branches to the "SPEC-DRIVE" section and
displays, as above, any matching files found. If you have more or fewer drives, add or eliminate the drive
"IF" statements, as necessary. Do the same for the drive letters listed inside the "FOR" brackets.
Now, if "/S" was typed, only the current directory and below will be searched. If only a file name is
typed, all of the current drive will be searched. In all cases, a message will tell you what is being searched
and for what file, and the matching file(s) will displayed with a blank line above and the file with a path
name will be shown.
Usage
Simply type "LOC (file name)" to start a search of the current drive. If you wish to search another
directory on the same drive from the one in which you are currently, enter its path without a backslash.
Thus, if you are in C:\BATCH and wish to search C:\UTIL\ZIP, enter "LOC UTIL\ZIP\(file name)".
Use a drive letter (with no colon) and the entire named drive will be searched. To search a sub-
directory of that drive, use the directory path without a backslash. So if you were on the `E' drive, to
locate all the .pcx files in your graphics directory and its subdirectories on the `C' drive, type "LOC C
GRAPHICS\*.PCX". Be sure to have a space on either side of the drive letter.
To search only the current directory and below, use "/S" as the first command line parameter. For the
.pcx example, type "LOC /S *.PCX". Use "ALL" as a parameter to search every directory on every drive.
Wildcards may be used if you want a range of files or can't remember the full name. Thus, typing
"LOC ALL READ-ME.TXT" would find all such files anywhere within the drives you specified in the
batch file. Similarity, typing "LOC ALL READ*.*" will find any file starting with "READ". If you are in
any subdirectory and wish to locate such files just on the current drive, simply type "LOC READ*.*".
With no parameters other than a file name, LOC.batwill always search the current drive in full.
If you see the file you want and wish to stop the search, enter "CONTROL-C". Be sure to set BREAK
to "ON" in your AUTOEXEC.bat so that DOS will stop immediately. If it is off, DOS will take longer to
stop the search.
XSET may be obtained from -xset.tripod.com.
http://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#DRT%23DRThttp://xset.tripod.com/http://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html#DRT%23DRThttp://xset.tripod.com/ -
7/27/2019 Advanced Batch Files III
9/24
Make Note Files based
On the Current Date
or Under a Given File Name
Sometimes you wish to be able to remember something but don't want to have to fire up a wordprocessor or text editor to type it up. This simple batch file allows one to quickly type some items right at
the command line which will automatically be placed into a file with a name you specify; or for really fast
note-taking, this batch file can automatically name the note file with today's date.
NOTE.bat:: NOTE.bat:: Creates a Note File for the Current Date or Given Name:: Able to Append Text to Same
::@ECHO OFF
IF "%1" == "" GOTO TODAY
:NAMECOPY CON C:\NOTES\TEMP.NOTTYPE C:\NOTES\TEMP.NOT >> C:\NOTES\%1.NOTGOTO END
:TODAYCOPY CON C:\NOTES\TEMP.NOTC:\DOS\XSET CUR-DATE DATE YY-MM-DD
TYPE C:\NOTES\TEMP.NOT >> C:\NOTES\%CUR-DATE%.NOT
:ENDDEL C:\NOTES\TEMP.NOTSET CUR-DATE=
________
Explanation
The batch file first determines if you typed a file name at the command line. If you have not, it
branches to the "TODAY" label. If you have, this "IF" statement will be false and the next section of the
batch file will be executed.
That section starts off by using the DOS "COPY CON" feature. It will copy whatever you type at the
console (keyboard) and save it to a file. In this case, that file is named "TEMP.not" for "Temporary
Note". (The usage of "COPY CON" will be explained farther on.)
Once you save the TEMP.not file, its information is sent to the permanent note file which will be
"%1.not". "%1" is a replaceable parameter, so it will be substituted with what ever file name you typed at
the command line. Thus, if you entered "NOTE PROJECT", the "%1" would become "PROJECT", so
your final (permanent) note file would be called "PROJECT.not". This may be done from anywhere
within DOS, and when finished, you will remain in the directory from which you issuedNOTE.bat. Thus,
you may quickly interrupt what you are doing and then return immediately to the current task.
Notice the use of the DOS append redirector ( >> ). This will create a file of the given name if one does
not exist, but if it does, the information will be appended (added) to the file. So when you first type a note
-
7/27/2019 Advanced Batch Files III
10/24
with a new file name, the file will be created, with the ".not" extension added for you by the batch file.
However, if you type more notes at a later time under the same name, those new notes will be added to
the old file. In either case, the TEMP.not file will be copied to the appropriate permanent note file and
this second file will be placed into the NOTES directory. The batch file then goes to the end where upon
the "TEMP.not" file is deleted.
Current-Date Notes
Now, if you don't give a name at the command line, the opening "IF" statement will be true and the
batch file will move to the "TODAY" section. Again, a file called "TEMP.not" will be created and will be
copied or appended to a permanent note file in the NOTES directory. However, the file will automatically
be named based on today's date.
This is done by using an update to the DOS "SET" command called "XSET". It places today's date into
an environment variable called "CUR-DATE". This is then used to name the permanent note file, which
is again placed into the NOTES directory. The format will be YEAR - MONTH - DAY so that files
named with it will be in chronological order in the directory. As before, if this file does not exist, it iscreated; otherwise any additional notes you type on the given day are added to the existing file. If you
type notes on the succeeding days, a new file is created each day with that day's date.
Again, the batch file then goes to the end where the "TEMP.not" file is deleted. Plus, the CUR-DATE
variable is removed from memory by resetting it to equal nothing. An XSET link will be given farther on.
Those of you with the %DATE% variable built into your version of DOS may eliminate the XSET
lines that are used to get the date into the environment and reword the remainder of file to take this into
account.
EXTRA STEPS?
Some of you may be wondering why the TEMP.not file is bothered with instead of just creating or
appending the actual file name directly. That could be arranged, but using a temporary file is a safety in
case one was in the NOTES directory and decided to type in a note. If an older version of DOS were
being used, after exiting the COPY CON part of the batch file, any existing file would be overwritten and
additional notes would *replace* the previous and not be added to them. Newer versions of COPY CON
prompt for an overwrite, but that is just an extra step for the user. Also, if one wished to append to the
file, that is not available from COPY CON, so that possibility would additionally have to be written intothe batch file. The method shown here eliminates these COPY CON problems and keeps the batch file
short.
Usage
To use the file, first create the "C:\NOTES" directory. Then whenever a "notes" urge strikes, simply
type "NOTE" at the command line to place text in a file with the current date in the name. Alternatively,
if you have a specific project in mind, then type a space and a name after the "NOTE" command. (Do not
add a file extension - the batch file does that for you, and do not use the name "TEMP" because the batchfile uses that name and then deletes it afterwards.) Any subsequent notes will be placed in one or the other
file. The next day, of course, a new note file will be created if you enter one based on date.
-
7/27/2019 Advanced Batch Files III
11/24
A hint to improve the note file layout is to add an opening blank line to any appended notes. This will
give you a separator when you peruse the file after several appends, making it easier to read. It also makes
it easier to discern which notes were in one session and those which are in another. Unfortunately, you
have to remember to do this, so it's something extra about which to think. (The improved version farther
on, will do this for you, plus more.)
COPY CON
When you type "NOTE" with or without a file name, the cursor will drop to a new line signalling that
you are using COPY CON. Type in your text, pressing ENTER when you wish to start a new line. You
may type long lines, but these lines are limited to 127 characters. If your screen setting is less than that,
the line will automatically wrap to the next and beep when 127 character spaces are filled. Press ENTER
to start a new line.
In reality, this batch file in meant for short notes and not an essay, so line-wrap should not really come
into play here. I mainly use this batch file to type in a quick address, phone/fax number, or URL. None of
those are likely to have a line exceed the screen width or line length limitation.
Regardless, I recommend against using this batch file if it might contain lines which exceed the screen
width because they might not wrap in some file viewers or text editors/word processors. This means the
line will trail off the screen to the right and scrolling will be required. Pressing ENTER at the end of each
line during composition of the original file will prevent this if you must use long lines.
When you are finished, press "Control-Z", or on some systems, you may press "F6" to get a ^Z
character. This character signals the end of the file. Press ENTER once more and the file will be saved
and copied to the NOTES directory. If you have hopelessly messed up what you are typing at the
command line or simply change your mind about the note file, then at any time before saving the COPY
CON file, you may press "Control-C" to stop. That one command will terminate COPY CON and also
display a "Terminate batch job?" prompt. Enter `Y' to stop immediately. No file will be saved. In fact, if
you enter `N', the batch file will still terminate in this case. You may then try again, if you wish, by re-
entering the batch file name with or without a note file name.
Realise that using "Control-C" means a TEMP.not file will be created and not erased. However, after
the next un-terminated NOTE.bat, it will be overwritten, and then deleted when the permanent note file is
created.
Be aware that in COPY CON, you can only edit the line on which you are currently, and even at that,
only by backspacing away the characters. Once you press ENTER and drop to the next line, the previousline becomes inaccessible. If you wish to edit any of these files later, you will have to load the file into a
text editor.
The nice thing about this simple method is that since all notes are in a NOTES directory, you may
peruse them all at a glance to see what projects or dates have notes attached. You may use the DOS
"TYPE" command to look at the contents, or any file viewer may be used because these files are all in
plain ASCII text.
Here is the link to get XSET.
http://xset.tripod.com/http://xset.tripod.com/ -
7/27/2019 Advanced Batch Files III
12/24
NOTE.bat
(Improved)
So we now have a batch file which can quickly copy notes from the command line. However, the data
in the file will be all crammed together and have no title. Therefore, this improved batch file will add a
title and spacing. Also, if one were to append to these files regularly and keep them for any length of
time, the question might arise as to exactly when the notes were taken. So, in addition, log dates & times
for both the "NAME" and "TODAY" versions will be placed before each entry.
:: NOTE.bat (Improved):: Creates a Note File for the Current Date or a Given Name:: Codes a Time into Current-Date Files:: Codes a Date & Time into Named Files::@ECHO OFF
IF "%1" == "" GOTO TODAY
:: Name Section:: ############
COPY CON C:\NOTES\TEMP.NOT
C:\DOS\XSET CUR-DATE DATEC:\DOS\XSET CUR-TIME TIME
IF NOT EXIST C:\NOTES\%1.NOT GOTO TITLEIF EXIST C:\NOTES\%1.NOT GOTO BODY
:TITLEECHO %1 Note File > C:\NOTES\%1.NOT
:BODY
ECHO. >> C:\NOTES\%1.NOTECHO DATE: %CUR-DATE% >> C:\NOTES\%1.NOTECHO TIME: %CUR-TIME% >> C:\NOTES\%1.NOTECHO. >> C:\NOTES\%1.NOTTYPE C:\NOTES\TEMP.NOT >> C:\NOTES\%1.NOTECHO -------- >> C:\NOTES\%1.NOTECHO. >> C:\NOTES\%1.NOTGOTO END
:: Current Date Section:: ############
:TODAYCOPY CON C:\NOTES\TEMP.NOT
C:\DOS\XSET CUR-DATE DATE YY-MM-DDC:\DOS\XSET CUR-TIME TIME
IF NOT EXIST C:\NOTES\%CUR-DATE%.NOT GOTO TITLE2IF EXIST C:\NOTES\%CUR-DATE%.NOT GOTO BODY2
:TITLE2ECHO %CUR-DATE% Note File > C:\NOTES\%CUR-DATE%.NOT
:BODY2
ECHO. >> C:\NOTES\%CUR-DATE%.NOTECHO DATE: %CUR-DATE% >> C:\NOTES\%CUR-DATE%.NOTECHO TIME: %CUR-TIME% >> C:\NOTES\%CUR-DATE%.NOTECHO. >> C:\NOTES\%CUR-DATE%.NOTTYPE C:\NOTES\TEMP.NOT >> C:\NOTES\%CUR-DATE%.NOT
-
7/27/2019 Advanced Batch Files III
13/24
ECHO -------- >> C:\NOTES\%CUR-DATE%.NOTECHO. >> C:\NOTES\%CUR-DATE%.NOTGOTO END
:ENDDEL C:\NOTES\TEMP.NOTSET CUR-DATE=SET CUR-TIME=
________
Explanation
This begins as before with the file branching to the appropriate section based on whether or not you
have given a file name at the command line. For the "NAME" section in this improved version of
NOTE.bat, COPY CON is issued and you type the text to create "TEMP.not", just as in the previous
version. After you save & exit, XSET is used to place the current date and time into separate variables.
Next, two "IF" statements decide whether the permanent note file has been created. If not, the batch file
places a title at the start of the new file. As in the previous version of this batch file, the file name you
type at the command line is substituted for "%1" and it becomes the name of the new file. The batch file
adds a ".not" file-name extension. After this, the batch file continues with the body of the file. Earlier, if it
was found the file already existed because you had previously typed notes, the batch file would have
jumped directly to the BODY section.
In the BODY section, twin redirectors ( >> ) are used to send the next information to the permanent
note file. (Remember that the double redirector appends, not overwrites.) First, a blank line is sent. This
separates the title or previous entries from what follows. Next, the current date & time are added; another
blank line is added, and then the temporary note file is copied to the new file. Finally, dashed & blank
lines are placed into the permanent file to separate it from any notes which might be added later.
The batch file finishes by going to the end where the temporary note file is deleted and the environment
variables are removed from memory by setting them to equal nothing.
Now, if no name is given at the command line, the file goes to the "TODAY" section. Here, a file name
is made from the current date and is either created or appended to in the same manner as in the NAME
section.
Usage
As with the first version of this batch file, first create the "C:\NOTES" directory. Then simply type
"NOTE" at the command line to place text into a file with the current date in the name and with each note
section prefaced by a time. Alternatively, typing a space and a name after the "NOTE" command will
create the same type of file but under the name you give.
SeeREMIND.batin Advanced Batch Files II
for a way to place notes into the command prompt.
A NOTE.bat Addendum
http://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv2.htmlhttp://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv2.html -
7/27/2019 Advanced Batch Files III
14/24
We have a way to copy notes from the command line. It would now be nice to be able to review the
notes and to delete ones no longer needed. Here is an extra batch file to do just that:
DDNOTE.bat:: DDNOTE.bat:: Displays and Prompts for Deletion of Note Files::@ECHO OFF
IF "%1" == "*TASKS*" GOTO FUNCTIONS
FOR %%F IN (C:\NOTES\*.NOT) DO CALL C:\BATCH\DDNOTE.BAT *TASKS* %%FGOTO END
:FUNCTIONSCLSMORE < %2DEL %2 /P
:END________
Explanation
Ignore the opening "IF" statement for a moment and look at the "FOR" line. It translates to: "FOR each
File IN the NOTES directory, DO run the DDNOTE batch file with a "*TASKS*" parameter and then the
.not file name". So for each .not file,DDNOTE.bat, is rerun. Now, that first "IF" statement will be true
because the first parameter has become "*TASKS*". Thus, the batch file will now be directed to the
"FUNCTIONS" section.
In the FUNCTIONS section, the screen is cleared and the MORE command is directed to take input
from each file passed to it by "FOR". It displays the file a screen at a time. Next, the DEL (DELETE)
command shows the file name and prompts to delete or not. You may press `Y' to delete, or `N' to keep
the file. After this, control returns to "FOR", which passes the next file in the NOTES directory back to
DDNOTE.bat with a "*TASKS*" parameter and the process repeats until all files in the directory have
been displayed. At that point, the batch file is directed to end.
Usage
When you wish to review your notes, from anywhere in DOS issue "DDNOTE". Each note will appear
on the screen. Afterwards, the file name will be given and a prompt to delete or not delete will show.
After choosing `Y' or `N', another file will be displayed, and so on, until all files have been gone through.
To cancel the batch file at any time, press "Control-C" and answer `Y' to the "Terminate batch job?"
prompt. When finished, you will remain in the directory from which you issued the batch file so you may
continue with any previous work.
So now, what if you have a zillion notes and just want to peruse one of them instead of cycling throughthe lot? Here's a version to do that:
-
7/27/2019 Advanced Batch Files III
15/24
DDNOTE.bat(Alternate Version)
:: DDNOTE.bat (Alternate Version):: Displays and Prompts for Deletion of All or a Specified Note File::@ECHO OFF
IF "%1" == "*TASKS*" GOTO ALL-FUNCTIONSIF "%1" == "" GOTO ALLIF NOT "%1" == "" GOTO SPECIFIC
:ALLFOR %%F IN (C:\NOTES\*.NOT) DO CALL C:\BATCH\DDNOT.BAT *TASKS* %%FGOTO END
:ALL-FUNCTIONSCLSMORE < %2DEL %2 /P
GOTO END
:SPECIFICIF NOT EXIST C:\NOTES\%1.NOT GOTO NO-FILECLSMORE < C:\NOTES\%1.NOTDEL C:\NOTES\%1.NOT /PGOTO END
:NO-FILEECHO.ECHO File Not Found!ECHO.
:END________
Explanation
Again, ignore the opening "IF" statement. The second and third "IF" statements determine if you
entered a file name at the command line. If not, the file works as does the previous version. However,if
you have given a file name, control is transferred to the "SPECIFIC" part. There, it's checked to see if the
file name you gave exists. If not, a prompt is shown and the batch file ends. If the file exists, it is
displayed a screen at a time and then you are prompted if you wish to delete it or not and the batch file
ends.
Usage
When you wish to review your notes, from anywhere in DOS issue "DDNOTE" or "DDNOTE
(filename). The specified or all notes will appear on the screen one at a time. Afterwards, the file name
will be given and a prompt to delete or not delete will show. After choosing `Y' or `N', if there are more
files to show, you'll see them and be given a chance to delete each. Otherwise, the batch file ends. As
before, when finished, you will remain in the directory from which you issued the batch file so you maycontinue with any previous work.
-
7/27/2019 Advanced Batch Files III
16/24
NOTET.bat
A Variation and Improvement
I recently received a suggestion thatNOTE.batbe able to append updates to an existing note at the top
of the file. That way, the latest information would be first. Placing information at the top of a file is easy.However, I wanted only one title to appear in each file. This means the new information would have to be
inserted between the title and previous entries. While writing a batch file to do that, I realised I could
combine all of the previous versions ofNOTE.batplusDDNOTE.bat, and I could make the whole file
much more efficient than it had been. Here is that version. This will append note updates to the beginning
of any existing Note file:
NOTET.bat:: NOTET.bat (Note Top)
:: Creates a Note File for a Given Name or for the Current Date:: Codes a Date & Time into Named Files:: Codes a Time into Current-Date Files:: Appends New Information to the Top of an Existing Note File:::: Prompts to View and/or Edit the Note file.::@ECHO OFF
IF "%1" == "" GOTO NOTE-TODAY
:NOTE-NAME:: Name Section
:: (This Section Creates or Appends a Note File by Name):: ############
C:\DOS\XSET CUR-DATE DATEC:\DOS\XSET CUR-TIME TIME
ECHO %1 Note File > C:\NOTES\TEMP.NOTECHO. >> C:\NOTES\TEMP.NOT
ECHO DATE: %CUR-DATE% >> C:\NOTES\TEMP.NOTECHO TIME: %CUR-TIME% >> C:\NOTES\TEMP.NOTECHO. >> C:\NOTES\TEMP.NOT
TYPE CON >> C:\NOTES\TEMP.NOTECHO -------- >> C:\NOTES\TEMP.NOT
IF NOT EXIST C:\NOTES\%1.NOT GOTO NAME-RENAMEIF EXIST C:\NOTES\%1.NOT GOTO NAME-APPEND
:NAME-RENAMEREN C:\NOTES\TEMP.NOT %1.NOTGOTO VIEW-EDIT
:NAME-APPEND
TYPE C:\NOTES\%1.NOT | FIND /V "%1 Note File" >> C:\NOTES\TEMP.NOTMOVE /Y C:\NOTES\TEMP.NOT C:\NOTES\%1.NOTGOTO VIEW-EDIT
-
7/27/2019 Advanced Batch Files III
17/24
:NOTE-TODAY:: Current Date Section:: (This Section Creates or Appends a Note File by Current Date):: ############
C:\DOS\XSET FILE-DATE DATE YY-MM-DDC:\DOS\XSET CUR-DATE DATEC:\DOS\XSET CUR-TIME TIME
ECHO %CUR-DATE% Note File > C:\NOTES\TEMP.NOTECHO. >> C:\NOTES\TEMP.NOT
ECHO TIME: %CUR-TIME% >> C:\NOTES\TEMP.NOTECHO. >> C:\NOTES\TEMP.NOT
TYPE CON >> C:\NOTES\TEMP.NOTECHO -------- >> C:\NOTES\TEMP.NOT
IF NOT EXIST C:\NOTES\%FILE-DATE%.NOT GOTO TODAY-RENAMEIF EXIST C:\NOTES\%FILE-DATE%.NOT GOTO TODAY-APPEND
:TODAY-RENAMEREN C:\NOTES\TEMP.NOT %FILE-DATE%.NOTGOTO VIEW-EDIT
:TODAY-APPENDTYPE C:\NOTES\%FILE-DATE%.NOT | FIND /V "%1 Note File" >> C:\NOTES\TEMP.NOTMOVE /Y C:\NOTES\TEMP.NOT C:\NOTES\%FILE-DATE%.NOTGOTO VIEW-EDIT
:VIEW-EDITCLS
ECHO.ECHO.ECHO.ECHO View Note ? VECHO.ECHO Edit Note ? EECHO.ECHO Quit ? EscapeECHO.
CHOICE /C:VE NULIF ERRORLEVEL 3 GOTO ENDIF ERRORLEVEL 2 GOTO EDIT-NOTE
IF ERRORLEVEL 1 GOTO VIEW-NOTEGOTO END
:VIEW-NOTEIF "%1" == "" CALL C:\BATCH\PCTV C:\NOTES\%FILE-DATE%.NOTIF NOT "%1" == "" CALL C:\BATCH\PCTV C:\NOTES\%1.NOT
CLSECHO.ECHO.ECHO.ECHO Edit Note ? EECHO.
ECHO Quit ? EscapeECHO.
CHOICE /C:E NULIF ERRORLEVEL 2 GOTO END
-
7/27/2019 Advanced Batch Files III
18/24
IF ERRORLEVEL 1 GOTO EDIT-NOTEGOTO END
:EDIT-NOTEIF "%1" == "" C:\DOS\EDIT C:\NOTES\%FILE-DATE%.NOTIF NOT "%1" == "" C:\DOS\EDIT C:\NOTES\%1.NOTCLS
:END
IF EXIST C:\NOTES\TEMP.NOT DEL C:\NOTES\TEMP.NOTSET FILE-DATE=SET CUR-DATE=SET CUR-TIME=
________
Explanation
Basically, this file works as do the previous versions. It creates a temporary Note file from a name you
give at the command line or from the current date. Using that information, an appropriate title is placed at
the start of the file. You then type your text and exit. This text is placed below the title and if no existing
Note file has the same name, the temporary Note file is renamed to the given name or to the current date.
Then, choices are placed on the screen as to whether you wish to view or edit the file you just created.
If you choose "View", after viewing the note, the choice to edit it is given again. After either edit, the
batch file ends, upon which, any temporary note files are deleted and variables removed from memory.
Now, when a note file already exists with the name you gave or with the current date, the batch file willbranch to an "Append" section. Here, the existing note file is piped through the DOS "FIND" command.
The " /V " switch tells FIND to locate all lines not containing the title string. So it finds everything except
for the title. These non-title lines of the existing note file are appended via " >> " to the just-written
TEMP.notfile, which already has the same title and your new text. The result is that the old notes are
placed below the title and new text, which is the same as if the new text was placed between the title and
the old text.
Finally, the temporary note file is renamed to the existing note file's name via the DOS "MOVE"
command, effectively replacing the old file with the new, updated one. The "/Y" tells DOS to overwrite
the existing file with no prompt asking you to choose to overwrite or not. This makes the last step
automatic.
Usage
Simply type "NOTET" with, or without, a name. After entering the information, a new file will be
created. Conversely, any existing one will have its old information placed into the new note file and be
overwritten. This overwritten file will contain the title and all information, both new and old.
If you don't want the bottom-append versions of this batch file, you may rename this improved file as
simply "NOTE.bat". If you want the combined make-view-edit version but prefer bottom appending, you
may eliminate the append-to-the-top parts of this last version and any lines pointing to them. Then, the
batch file will work as does the previousNOTE.batwhereby the new information is placed underneath the
old, but you will now have the view-edit options built in.
(Note that `
-
7/27/2019 Advanced Batch Files III
19/24
COPY FILES IN ORDER
This basic batch file can be expanded to do a number of sequential file chores. The basic version
simply copies the same file as a number of sequentially-numbered files. For this example, generic
directories and file names will be used. You may substitute your own. Afterward, an example will beshown which can do a more complicated chore.
SEQ.bat:: SEQ.bat:: Copies Files in Sequential Order:: Makes 4 Copies::@ECHO OFF
SET NUMBER=1
:AGAINCOPY C:\DOCS\TEST.DOC C:\TEMP\TEXT-%NUMBER%.DOC > NUL
XSET /MATH NUMBER=%NUMBER% + 1IF NOT "%NUMBER%" == "5" GOTO AGAIN
ECHO.ECHO 4 .doc File Copies CreatedECHO.
CALL C:\BATCH\DR C:\TEMP\*.DOC
:ENDSET NUMBER=
________
Here, a variable called "NUMBER" is created to equal the number `1'. Next, the TEST.doc file is
copied to the TEMP directory as a new file called "TEXT-1.doc". Note that the new name uses the
NUMBER variable. DOS will substitute the assigned value here; thus, since NUMBER equals `1', the file
name will be "TEXT-1.doc". The COPY command's message is sent to "NUL", so it is never seen on
screen.
XSET's "MATH" switch is then used to reset "NUMBER" to be NUMBER plus 1. Since NUMBER
was equal to `1', it is now 1 + 1, or a value of `2'. This value is next compared to the preset value of `5'.
Since they are not equal, the copy command is run again. However, this time, NUMBER is equal to `2'
because it just got re-set. Thus, TEST.doc is now again copied to the TEMP directory, but as "TEXT-
2.doc". This continues until NUMBER is equal to `5' which results in "GOTO AGAIN" being ignored
and the succeeding line in the batch file being read instead.
Here, the batch file prompts that 4 files have been created, with blank lines showing above & below
that prompt. A directory listing proves the files were created. The NUMBER variable is then removed
from memory.
-
7/27/2019 Advanced Batch Files III
20/24
OK. So that's the basic idea. Now, here's how these techniques may be used for a real-world purpose.
Let's say you have composed a number of differently named document files for the purpose of a project.
Your project is complete but you wish to have the instructional documents be called "MANUAL-1.doc",
"MANUAL-2.doc", "MANUAL-3.doc", etc. Here's a method of doing that:
PROJ-SEQ.bat:: PROJ-SEQ.bat:: Renames Files in Sequential Order::@ECHO OFF
IF "%1" == "*TASKS*" GOTO TASKS
IF NOT EXIST C:\PROJECT\WORK\NUL MD C:\PROJECT\WORKSET NUMBER=1
:COPY-PROJFOR %%F IN (C:\PROJECT\*.DOC) DO CALL C:\BATCH\PROJ-SEQ.bat *TASKS* %%F
GOTO DISPLAY
:TASKSCOPY %2 C:\PROJECT\WORK\MANUAL-%NUMBER%.DOC > NULXSET /MATH NUMBER=%NUMBER% + 1GOTO END
:DISPLAYECHO Y | DEL C:\PROJECT\*.DOC > NULMOVE C:\PROJECT\WORK\*.* C:\PROJECT > NUL
CALL C:\BATCH\DR C:\PROJECTRD C:\PROJECT\WORK
SET NUMBER=
:END________
Explanation
Ignore the first "IF" statement for now. The next line creates a PROJECT\WORK directory, if one does
not exist. The newly-named files will be placed in here temporarily. This creates extra steps, but is done
in case one or more of the original files happens to have a name the same as one to be created. If you
don't feel you are going to run into this problem, you can shorten the batch file by eliminating allreferences to the WORK directory and changing the COPY command to a REN (Rename) one.
Next, an environment variable called "NUMBER" is set to a value of `1'. Now, a "FOR" command says
that FOR each .doc File IN the C:\PROJECT directory, DO call this batch file again, but with
"*TASKS*" as the first parameter. So now, that first IF statement is true, and the batch file skips to the
"TASKS" section. Here, the 2nd parameter is copied to PROJECT's work directory. That second
parameter is the first file selected by "FOR". It has substituted that first file's name for "%%F".
This first file is copied under a new name called "MANUAL-(value).doc. The "value" is determined by
the value of NUMBER. Recall that it was set to`1', near the start of the batch file when it was first run.
So, this time through, the file will be named "MANUAL-1.doc" because the NUMBER variable was
substituted with `1'.
-
7/27/2019 Advanced Batch Files III
21/24
Next, XSET's "MATH" switch is used. It re-sets NUMBER to be NUMBER plus 1. Since NUMBER
had been 1, it is now 1 + 1, or `2'. The second run-through of the batch file then ends. Now, since "FOR"
is not finished from the first run-through, it takes the next file in the PROJECT directory, and does the
same thing; except since NUMBER now has a value of `2', the file will be named "MANUAL-2.doc".
XSET then re-sets NUMBER to `3', and the process continues to repeat until no .doc files are left in the
PROJECT directory. The batch file is then directed to the DISPLAY section via the line after the "FOR"
one.
In the DISPLAY section, the original PROJECT .doc files are deleted and the new MANUAL files are
moved into the PROJECT directory. A directory listing shows that the procedure has been completed.
The WORK directory is deleted and the NUMBER variable removed from memory to clean up.
Usage
Simply, issue "PROJ-SEQ" and the files will be renamed in a numerical order. By changing the batch
file's parameters, you may select all, or any type of files in any directory and name them to anything you
wish. This is, of course, provided you don't use illegal file name characters, or exceed the file name &extension size limits. To use this with other files, substitute your selected file and directory names in the
above batch file.
Be aware that the file order will be that of the unordered directory. So the first file will be the oldest
one created. However, it will be the last file if that oldest-created file was the most recent to be modified.
This is because DOS places files in a directory by creation, and a modified file is deemed to be created on
the date it was modified. In the future, I may show a version that will number the files based on age,
alphabetical order, size, or whatever.
XSET may be obtained from -xset.tripod.com.
TRANSFER FILES
Here is a direct way for you to move one or more files from the current directory to any other directory
of choice regardless of its drive or level below the root - without having to type a drive letter or path!
TRAN.bat:: TRAN.bat:: Transfers All or Selected Files or File Groups:: to the Directory of Choice:::: The Destination Directory Must be able to be Accessed via a Batch File.:: If such a Batch File does not Exist, use a Directory Change:: Program such as "Directory Maven" or Norton's "CDD".:::: This Program Must be used from within a Batch File to Work Here.::
@ECHO OFF
F:\DOS\XSET S-DRIVE FDRIVE .F:\DOS\XSET S-DIRECTORY DIR
http://xset.tripod.com/http://xset.tripod.com/ -
7/27/2019 Advanced Batch Files III
22/24
IF "%1" == "" GOTO TRAN-ALLIF NOT EXIST %1 GOTO NO-FILEIF NOT "%1" == "" GOTO TRAN-SPEC
:TRAN-ALLSET S-FILES=*.*GOTO DESTINATION
:TRAN-SPEC
SET S-FILES=%1
:DESTINATIONECHO.ECHO.F:\DOS\XSET /COLOR LIGHTGREEN /PROMPT " Destination? " DestinationCALL %DESTINATION%
:MOVE-FILESF:\DOS\MOVE %S-DRIVE%\%S-DIRECTORY%\%S-FILES% .SHIFTIF NOT "%1" == "" SET S-FILES=%1IF NOT "%1" == "" GOTO MOVE-FILES
:CHANGE-DIRF:\DOS\XSET CUR-DIR FDIR .ECHO.ECHO.ECHO The Current Directory is:ECHO %CUR-DIR%ECHO.ECHO Return to: %S-DRiVE%\%S-DIRECTORY%? Y? N?ECHO.
CHOICE > NULIF ERRORLEVEL 2 GOTO CLEANUP
:YESCLS%S-DRIVE%CD\%S-DIRECTORY%GOTO CLEANUP
:NO-FILEECHO.ECHO.ECHO File "%1" does not ExistECHO.GOTO END
:CLEANUPF:\DOS\XSET /CLEARF:\DOS\XSET /LOAD < C:\DOS\DOSPLUS\XSET\ENVIRO.DEFCLSF:\BATCH\DR
:END________
Explanation
XSET is used here to get the source directory and its drive into the variables "S-DIRECTORY" and "S-
DRIVE". Note that `.' represents the current directory and it is used by XSET to determine that directory's
drive.
-
7/27/2019 Advanced Batch Files III
23/24
Next, the file looks to see if there are any parameters given when TRAN was issued at the command
line. If there are none, the file branches to TRAN-ALL (Transfer All Files). If there is at least one
parameter, its existence is ascertained and the file branches to TRAN-SPEC (Transfer Specified File). If
there is a parameter (file name) but it doesn't exist, a message stating so is displayed on the screen as
instructed in the NO-FILE section. After this, the batch file ends. Otherwise, the batch file goes to the
TRAN-SPEC section. In either the TRAN-ALL or TRAN-SPEC section, S-FILES (Source Files) is set to
equal either all files or the first file on the command line depending on to which section the batch file has
branched.
Now, XSET is used to display a coloured prompt on the screen requesting a destination for the chosen
files. The user's answer (input) is made into a variable called "DESTINATION". This must be a batch file
because the next line calls this batch file the user chose as DESTINATION and that is used to make the
change to the required directory. So if one has a `DL' shortcut to the C:\DOWNLOAD directory, that
would be entered here. XSET will make DESTINATION equal to "DL". The next line now translates to
"CALL DL". Since `DL' is a batch file name, that batch file will be run and the user taken to the
C:\DOWNLOAD directory. After this, control is returned to TRAN.bat starting at the MOVE-FILES
section (the line after the "CALL" command). The batch file continues to execute from there.
If a batch file does not exist for the target directory and you don't wish to make one, use a directory-change program and have it controlled via a batch file. Here is the batch file I use to have Directory
Maven make the change.
:: DM.bat:: Runs Directory Maven::@ECHO OFF
C:\DOS\DOSPLUS\DIR-MAVE\DM.EXE %1
This is a simple file that runs the Directory Maven (DM) executable from its own directory. It looks at
the `%1' parameter filled in by the user when XSET asked for the Destination. "DM DOS" might have
been typed, so XSET makes "DESTINATION" equal to "DM DOS". The next line now translates to
"CALL DM DOS" and the `DM' batch file runs with `DOS' as its parameter, so it takes the user to that
directory.
Now we get to the actual transfer. The "MOVE-FILES" section moves the requested
drive\directory\files of the source to the current directory, which is the one to which we changed via the
batch file or by Directory Maven. Next, the SHIFT command shuffles down by a factor of `1' all the
parameters specified when TRAN was first issued. So what was Parameter `2' (%2) is now Parameter `1'
(%1), Parameter `3' is now `2', and so on. The purpose of this is to accommodate any additional files thatwere first given on the command line that still have not been moved. The next two lines in this section say
that if there is a `%1' parameter, reset S-FILES to equal the new `%1' file name and to move it to the
target directory. This sequence continues until all specified files are moved.
Now, XSET is once again used to get the current directory. It is used in the on-screen display to state
what the current directory is and to ask if the user wishes to go back to the source directory which had
already been set earlier as "S-DIRECTORY". CHOICE is employed to determine if the user pressed `N'.
If so, the file branches to "CLEANUP". If not, it continues through the "YES" section. There, the user is
returned to the source drive and directory.
In "CLEANUP", XSET restores the environment to its default, effectively removing all variables set
during this batch file from memory. This is done by first clearing all variables and then by loading the
default environment from a previously written text file I have called "ENVIRO.DEF". Finally, a directory
-
7/27/2019 Advanced Batch Files III
24/24
listing confirms the operation whether the user has chosen to remain in the target directory or return to the
source directory.
Usage
Simply issue "TRAN" to move all files. A prompt will ask for a destination. Use a batch file to select adirectory or to run a directory-change program that will change to the target directory for you. Then
answer the question as to whether to return to the source directory or not.
To move selected files or file groups, list them after "TRAN". So to move two different files, issue
"TRAN FILE-1.EXT FILE-2.EXT". You may also use wildcards: "TRAN *.TXT 1000????.jpg".
One may make TRAN.bat a copy batch file by replacing the MOVE command with an XCOPY one. If
you wish to have both, name the COPY version "TRANC.bat". Alternatively, one could add another
CHOICE section to the TRAN.bat shown here that asks the user if he wishes to copy or Move the files. I
personally wouldn't like that because it would add extra steps for me every time I ran the operation. I
would rather type "TRAN" or "TRANC" as required, thus skip an extra prompt and key issuing.
Finally, if you always want to stay in the target directory, eliminate the CHOICE section and
CHANGE-DIR steps. If you prefer to always return to the source, eliminate the CHOICE section and
keep just the CHANGE-DIR steps required to return you to the source.
XSET may be obtained from:
-xset.tripod.com
A directory change program is available at:
-Directory Maven
http://xset.tripod.com/http://www.briggsoft.com/dmaven.htmhttp://xset.tripod.com/http://www.briggsoft.com/dmaven.htm