Zähler für Schleifen in DOS

Auf der DOS-Ebene ist der FOR-Befehl die einzige Möglichkeit, Schleifen zu konstruieren, womit sich jedoch beispielsweise keine Schleifen mit durchlaufenden Nummern realisieren lassen. Wir haben für Sie eine Methode parat, mit der Sie auf Batchebene Schleifen erzeugen können, um z.B. die Dateien »DATEI001« bis »DATEI025« zu generieren – ganz nach Geschmack.

Der Filter INCR.DEB filtert dazu aus den empfangenen Zeichen die Abschnitte, die nur aus den Ziffern 0 bis 9 bestehen, heraus und betrachtet diese als Dezimalzahl, die es um den Wert 1 (INCRement) zu erhöhen gilt. Dabei muß die Zahl nicht unbedingt aus zusammenhängenden Ziffern bestehen; eine zu vervielfältigende Datei könnte z. B. »DATEI000.000« heißen. Beträgt der Wert der Extension 999, ergibt das nächste Inkrement »DATEI001.000«. Die Länge der Zahl bleibt aber stets gleich. Sie müssen je nach Bedarf eben genügend führende Nullen reservieren, sonst gibt es einen sogenannten »Wrap«: Aus »DATEI.999« entsteht nämlich »DATEI.000«. Der Folgende Stapeljob zählt vom ersten Parameter bis zum zweiten, indem er bei jedem Durchlauf eine temporäre Batch-Datei erzeugt und sie aufruft. Wegen des verwendeten CALL-Befehls eignet sich diese Konstruktion leider nur für DOS 3.3 oder neuer – mit einigen Tricks ist es aber auch bei älteren Versionen möglich. Darauf wollen wir aber nicht näher eingehen. Rufen Sie SCHLEIFE.BAT beispielsweise mit den Eingaben »SCHLEIFE 1 5«, »SCHLEIFE X111 X222« oder »SCHLEIFE DATEI.000 DATEI.010« auf. Achten Sie dabei darauf, daß sich die beiden Parameter im Aufbau, also auch in Groß- und Kleinschreibung, bis auf den Zahlenwert nicht voneinander unterscheiden!

 @ECHO OFF
 REM Temporäre Dateien wie TMP.BAT
 REM am besten in eine RAM-Disk...
 IF "%2"=="" GOTO FEHLER
 SET VAR=%1
 :SCHLEIFE
 ECHO %VAR%
 IF %VAR%==%2 GOTO ENDE
 ECHO SET VAR=%VAR% | INCR >TMP.BAT
 CALL TMP.BAT
 GOTO SCHLEIFE
 :FEHLER
 ECHO Sie müssen einen Start- und
 ECHO einen Endwert angeben!
 :ENDE
 IF EXIST TMP.BAT DEL TMP.BAT
Name: INCR.DEB
Funktion: Addiert zu einer empfangenen Dezimalzahl den Wert 1.
Übersetzung : DEBUG <INCR.DEB
Prüfsumme: 5B0D
Anwendung: z.B. ECHO 1 | INCR (ergibt 2)
Einschränkungen: Da zum laufenden Erhöhen des Zählers ein eigener Stapel- job nötig ist, läuft die Schleife relativ langsam ab.
 A
 XOR BX,BX           ;100
 MOV AH,3F           ;102
 MOV CX,FD00         ;104
 CALL 12F            ;107
 MOV CX,AX           ;10A
 MOV BX,AX           ;10C
 MOV AL,[BX+1FF]     ;10E
 INC AL              ;112
 CMP AL,31           ;114
 JB 123              ;116
 CMP AL,3A           ;118
 JA 123              ;11A
 MOV By[BX+1FF],30   ;11C
 JNZ 126             ;121
 DEC BX              ;123
 JNZ 10E             ;124
 MOV [BX+1FF],AL     ;126
 MOV AH,40           ;12A
 MOV BX,1            ;12C
 MOV DX,200          ;12F
 INT 21              ;132
 RET                 ;134
 
 RCX
 35
 NINCR.COM
 W
 Q

Quelle: 200 Utilities für PC-/MS-DOS von Gerhard Schild und Thomas Jannot