home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* SAVEBAK.PAS *)
- (* Alle Dateien mit der Endung .BAK werden in Dateien mit *)
- (* den fortlaufenden Endungen .001, .002 ... umbenannt. *)
- (* Compiler: Quick Pascal 1.0 *)
- (* (c) 1990 Andreas Timm & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM SaveBak;
-
- USES Dos;
-
- VAR
- BakDatei,
- NoDatei : SearchRec;
- Datei : Text;
- NewName,
- AktuellesLaufwerk,
- Pfad : STRING;
- MaxNo,
- NewNo : INTEGER;
-
-
- FUNCTION DateiName(VAR Datei : SearchRec) : NameStr;
- { Ermittelt den Dateinamen OHNE Extension }
- BEGIN
- DateiName := Copy(Datei.Name, 1,
- Pos('.', Datei.Name) - 1);
- END;
-
- FUNCTION Extension(VAR Datei : SearchRec) : ExtStr;
- { Ermittelt die Extension ohne Punkt }
- BEGIN
- Extension := Copy(Datei.Name,
- Pos('.', Datei.Name) + 1, 3);
- END;
-
- FUNCTION NumExtension(VAR Datei : SearchRec) : Integer;
- { Ermittelt die Extension als Integer-Zahl }
- { Falls die Umwandlung erfolglos war (Buchstaben), }
- { wird eine Null zurückgegeben }
- VAR
- Value, Code : INTEGER;
- BEGIN
- Val(Copy(Datei.Name, Pos('.', Datei.Name) + 1, 3),
- Value, Code);
- IF Code = 0 THEN
- NumExtension := Value
- ELSE
- NumExtension := 0;
- END;
-
- FUNCTION StrExtension(VAR NumExt : Integer) : ExtStr;
- { Wandelt die Extension in einen String um }
- { Höchste Zahl ist 999 }
- VAR
- NumStr : STRING;
- BEGIN
- Str(NumExt, NumStr);
- CASE NumExt OF
- 1..9 : NumStr := '.00' + NumStr;
- 10..99 : NumStr := '.0' + NumStr;
- 100..999 : NumStr := '.' + NumStr;
- 1000 : NumStr := '.' + '999';
- END;
- StrExtension := NumStr;
- END;
-
- BEGIN
- WriteLn;
- { Falls in der Kommandozeile ein Pfad eingegeben wurde, }
- { hänge ein Backslash an }
- IF ParamStr(1) <> '' THEN
- Pfad := ParamStr(1) + '\'
- ELSE
- Pfad := '';
-
- { Suche nach der ersten Datei mit der Endung BAK }
-
- FindFirst(Pfad + '*.bak', AnyFile, BakDatei);
-
- { Change Directory ins gewünschte Laufwerk }
-
- IF ParamStr(1) <> '' THEN BEGIN
- GetDir(0, AktuellesLaufwerk);
- {$I-}
- ChDir(ParamStr(1));
- ChDir(AktuellesLaufwerk);
- {$I+}
- END;
-
- { Falls IOResult <> 0 ist, konnte nicht in den }
- { angegebenen Pfad verzweigt werden. Der Kommando- }
- { zeilenparameter war dann falsch. }
-
- IF (DosError = 0) AND (IOResult = 0) THEN BEGIN
- REPEAT
- MaxNo := 0;
-
- { Suche nach der ersten Datei mit dem Dateinamen }
- { einer gefundenen BAK - Datei }
-
- FindFirst(Pfad + DateiName(BakDatei) + '.*',
- AnyFile, NoDatei);
- REPEAT
- IF (NumExtension(NoDatei) >= 0) AND
- (NumExtension(NoDatei) > MaxNo) THEN
- MaxNo := NumExtension(NoDatei);
- FindNext(NoDatei);
- UNTIL DosError = 18;
- { DosError = 18 bedeutet: nix mehr gefunden }
-
- NewNo := MaxNo + 1;
-
- { Bestimme den neuen Namen der BAK - Datei }
-
- NewName := DateiName(BakDatei) + StrExtension(NewNo);
- Assign(Datei, Pfad + BakDatei.Name);
- IF NewNo > 999 THEN
- Erase(Datei)
- ELSE BEGIN
- IF ParamStr(1) <> '' THEN BEGIN
- ChDir(ParamStr(1));
- Rename(Datei, NewName);
- ChDir(AktuellesLaufwerk);
- END ELSE
- Rename(Datei, NewName);
- END;
- WriteLn(BakDatei.Name:12, ' ----> ', NewName:12);
- FindNext(BakDatei);
- UNTIL DosError = 18;
- WriteLn;
- END;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von SAVEBAK.PAS *)