Dateien in DOS verschieben

Eines der unter Insidern beliebtesten Utilities ist das Unix-Kommando MV (MoVe) zum Verschieben von Dateien aus einem Directory in ein anderes. Wir haben eine Version für DOS parat, MV.DEB, das die gleiche Umverlegung ohne physikalisches Verschieben des Dateiinhalts vornimmt. MV funktioniert nur innerhalb eines logischen DOS-Laufwerks. Die Verwendung von Wildcards ist erlaubt. Falls ein Verschieben nicht möglich ist, weil z. B. die Zieldatei bereits existiert, gibt es eine kurze Fehlermeldung aus. MV wertet zunächst die übergebenen Parameter aus. Mit Hilfe der DOS-Funktionen »Find First File« (4Eh) und »Find Next File« (4Fh) ermittelt das Programm alle Dateien, die der Quellspezifikation entsprechen.

Per DOS-Funktion »Change Directory Entry« (56h) verlegt MV anschließend jeden einzelnen Directory-Eintrag an die gewünschte Zielposition. Dabei zeigt es den Verlauf der Operation auf dem Bildschirm an.

Name: MV.DEB
Funktion: Verschiebt beliebige Dateien in ein anderes Verzeichnis.
Übersetzung: DEBUG <MV.DEB
Prüfsumme: DE88
Anwendung: MV [Lw:][Quellverz\]Quelldateien [Lw:]Zielverz
Einschränkungen: Funktioniert nur innerhalb eines logischen DOS-Laufwerks.
A
CLD                 ;100
MOV SI,82           ;101
MOV DI,1CC          ;104
CMP By[80],4        ;107
JB 17C              ;10C
MOV BX,DI           ;10E
CALL 1A2            ;110
JZ 17C              ;113
CALL 197            ;115
JZ 10E              ;118
CMP By[DI-1],20     ;11A
JNZ 110             ;11E
MOV By[SI-1],0      ;120
MOV DI,2CC          ;124
CALL 1A2            ;127
JNZ 127             ;12A
CALL 197            ;12C
JZ 134              ;12F
MOV AL,5C           ;131
STOSB               ;133
MOV BP,DI           ;134
MOV DX,82           ;136
MOV CX,27           ;139
MOV AH,4E           ;13C
INT 21              ;13E
JB 17C              ;140
MOV DI,BX           ;142
MOV AX,1CC          ;144
CALL 17D            ;147
MOV SI,1B2          ;14A
CALL 177            ;14D
MOV DI,BP           ;150
MOV AX,2CC          ;152
CALL 17D            ;155
MOV DX,1CC          ;158
MOV DI,2CC          ;15B
MOV AH,56           ;15E
INT 21              ;160
MOV SI,1BF          ;162
JB 16A              ;165
MOV SI,1C9          ;167
CALL 177            ;16A
MOV AH,4F           ;16D
JMP 13E             ;16F
MOV DL,AL           ;171
MOV AH,2            ;173
INT 21              ;175
LODSB               ;177
CMP AL,0            ;178
JNZ 171             ;17A
RET                 ;17C
MOV SI,9E           ;17D
MOV CX,E            ;180
REPZ MOVSB          ;183
MOV SI,AX           ;185
CALL 177            ;187
MOV CX,DI           ;18A
SUB CX,SI           ;18C
MOV SI,1BD          ;18E
CALL 177            ;191
LOOP 18E            ;194
RET                 ;196
CMP By[DI-1],5C     ;197
JZ 1A1              ;19B
CMP By[DI-1],3A     ;19D
RET                 ;1A1
LODSB               ;1A2
CMP AL,61           ;1A3
JB 1AD              ;1A5
CMP AL,7A           ;1A7
JA 1AD              ;1A9
SUB AL,20           ;1AB
STOSB               ;1AD
CMP By[SI],D        ;1AE
RET                 ;1B1
DB "is moved to ",0
DB "-> error!",7,D,A,0

RCX
CC
NMV.COM
W
Q

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