Using EDLIN scripts


Two examples of batch files using EDLIN and redirection of input and
output. Both files have been slightly changed for clarity.

EDLOOP.BAT appeared in PC Magazine 1991-05-28 (Vol. 10, no. 10)
REPL.BAT appeared in PC Magazine 1990-11-13 (Vol. 9 no. 19)

─────────────────────────────────────────────────────────────────────

@echo off

rem EDLOOP.BAT -- creates a batch file to repetitively execute a
rem series of commands. In this case ring the doorbell.

if "%1"=="" goto NEEDNUMBER

rem Open the file ring.bat with the statements to be reiterated

echo echo DING DONG > ring.bat
echo echo **** **** >> ring.bat

rem Create input for the Edlin script
rem Use the copy count option & delete the first existence
rem Multiple commands on one line must be separated with a
rem semicolon

echo 1,2,1,%1C;1,2D;E; > edlininp.dat
edlin ring.bat < edlininp.dat >nul

rem Run the reiterative batch job & tidy up

call ring.bat
erase edlininp.dat
erase ring.*
goto DONE

:NEEDNUMBER

ECHO The syntax should be
ECHO EDLOOP n
ECHO where n is the number of iterations

:DONE

───────────────────────────────────────────────────────────────────────

The following batch file creates a DEBUG script that creates an EDLIN
script to make a simple text search-and-replace utility. DEBUG is used
to put the Ctrl-Z character (1Ah) that EDLIN needs for the Replace Text
command into TEMPEDLN.SCR. The script and log files are listed below.


REPL.BAT

@ECHO OFF
REM This is REPL.BAT
IF '%3'=='' GOTO explain
ECHO Now checking for valid parameters . . .
ECHO %2 | FIND "%1" > XXXXXXXX.TMP
REM Only if %2 contained %1 will the tempfile be
REM non-empty. DOS won't copy an empty file. So
REM if the second tempfile exists, %2 DID contain %1.
COPY XXXXXXXX.TMP YYYYYYYY.TMP > NUL
DEL XXXXXXXX.TMP > NUL
IF EXIST YYYYYYYY.TMP GOTO BadParams
ECHO Replacing "%1" with "%2" in files matching:
ECHO %3 %4 %5 %6 %7 %8 %9
:--------------------------------------------------
ECHO Now creating DEBUG script. . .
ECHO NTEMPEDLN.SCR > TEMPDEBG.SCR
ECHO E CS:100 '1R%1' 1A '%2' 0D 0A 'E' 0D 0A 1A >> TEMPDEBG.SCR
ECHO RCX >> TEMPDEBG.SCR
ECHO 40 >> TEMPDEBG.SCR
ECHO W >> TEMPDEBG.SCR
ECHO Q >> TEMPDEBG.SCR
:--------------------------------------------------
ECHO Now creating EDLIN script . . .
DEBUG < TEMPDEBG.SCR > NUL
DEL TEMPDEBG.SCR
ECHO Replacing "%1" with "%2" in files matching: > REPL.LOG
ECHO %3 %4 %5 %6 %7 %8 %9 >> REPL.LOG
:--------------------------------------------------
ECHO Now performing replacement . . .
FOR %%f IN (%3 %4 %5 %6 %7 %8 %9) DO EDLIN %%f < tempedln.scr >> REPL.LOG
DEL TEMPEDLN.SCR
ECHO To see a log of the work REPL.BAT did, read the file REPL.LOG
GOTO end
:BadParams
DEL YYYYYYYY.TMP > NUL
ECHO Unfortunately, the string "%2" _contains_
ECHO the string "%1". REPL.BAT can't handle that.
GOTO end
:Explain
ECHO SYNTAX: "REPL findstr replacestr filespec [filespec...]
ECHO This batch program will search files matching up to 7
ECHO file specifications and replace all occurrences of the
ECHO "find string" with the "replace string" in each file.
:end



TEMPDEBG.SCR

NTEMPEDLN.SCR
E CS:100 '1Rpush' 1A 'PUSH' 0D 0A 'E' 0D 0A 1A
RCX
40
W
Q



TEMPEDLN.SCR

1Rpush^ZPUSH
E
^Z



REPL.LOG

Replacing "push" with "PUSH" in files matching:
*.asm
End of input file
*1Rpush^ZPUSH
Not found
*E
End of input file
*1Rpush^ZPUSH
146: PUSHf
147: PUSH ds
148: PUSH es
149: PUSH ax
150: PUSH bx
151: PUSH cx
152: PUSH dx
153: PUSH di
154: PUSH si
*E
End of input file
*1Rpush^ZPUSH
367: PUSH ax
402: PUSH es
*E
End of input file
*1Rpush^ZPUSH
Not found
*E
End of input file
*1Rpush^ZPUSH
Not found
*E

─────────────────────────────────────────────────────────────────────

This batch file tests for EDLIN presence:

@echo off
rem DOS will accept a 'Bad Command' with an errorlevel of zero.
rem EDLIN will terminate with an errorlevel of 255 if called with
rem no file name (correct format is: EDLIN filename.ext [/B]).
edlin > nul
if errorlevel 1 goto IS_EDLIN
echo EDLIN is not in path.
goto EO_BAT
:IS_EDLIN
echo EDLIN is in path.
:EO_BAT

─────────────────────────────────────────────────────────────────────