SICHERUNGEN UND AUFRÄUMARBEITEN IN DOS Wenn Windows startet, gibt es etliche Sicherungen, die durchzuführen sind, auf der andern Seite müssen Sicherungsdateien regelmäßig gelöscht werden - am besten die jeweils ältesten. Zudem können dann Prozesse beendet werden, die nur Speicherplatz blockieren und Änderungen an der Registry zurückgenommen werden. 'Abgleich und Aufräum' - Batchdateien werden entweder im AUTOSTART angesprochen, nach dem Starten von Windows, kann aber auch (in Win 98) in der Autoexec.bat angesprochen werden (dann öffnet kein Extrafenster) - aber nur mit kurzen 8/3 Dateinamen! Dafür werden die Änderungen auch bei in Windows abgebrochener Routine durchgeführt - eben VOR Windows. Deshalb können da auch Sicherungsdateien wie die SWAP-Datei gelöscht werden, auf die nach dem Windows-Start kein Zugriff mehr besteht Zum Schluß wird mit C:\WINDOWS\WIN.COM Windows gestartet Anderseits kann, wenn die Batch-Datei erst nach dem Windows-Start angeworfen wird, in Prozesse eingegriffen werden, die dann schon abgeschlossen sind und korrigiert werden sollen. Am besten ist es, eine oder zwei Start-Batch-Dateien zu erstellen, welche verschiedene Batch- Dateien nacheinander mit CALL C:\IRGENDWO\NAECHSTE.BAT aufrufen; diese lassen sich dann leichter ändern. Einzelne Batchdateien: 1. Killt Prozesse, um Speicher frei zu machen. Beispielsweise mit TASKKILL oder Kill.exe - je nach Betriebssystem und benutzter Software C:\irgendwo\kill_etwas.bat Darin: killtask Irgendwas.exe killtask IrgendwasAnderes.exe REM kill /f Mist.exe ... 2. Kopiert Dateien, um sie zu sichern - oder um wie hier eine Sicherung zurückzuspielen, um einen bestimmten Stand in Windows immer wieder zu erzwingen: C:\irgendwo\copy_etwas.bat Darin: if not exist "C:\irgendwo\irgendwas.ini" GOTO fehler copy "C:\irgendwo\irgendwas.ini" "C:\WINDOWS\irgendwas.ini" ... REM Wenn Alles gut geht: GOTO ende REM Wenn nicht: :fehler Echo. ECHO FEHLER!! Echo Es trat ein Fehler auf. Eine oder mehrere Dateien wurden Echo moeglicherweise nicht gefunden. Echo Das Programm wurde an dieser Stelle angehalten. Echo Es wurden nicht alle Backups erstellt. Echo. exit Rem Umgehungsziel und Ende: :ende echo. echo Operation beendet. echo. echo Ende. echo. delay 3 echo. :close echo. delay 3 echo Bitte Fenster schliessen. REM Hier cls CLS 3. Entfernt in der Registry beispielsweise hartnäckige, unerwünschte "Neue..." - Einträge im Explorer-Kontextmenü, die sonst nicht wegzukriegen sind: regedit /s "C:\irgendwo\Neue_Datei_weg.reg" 4. Löscht einzelne Dateien oder ganze Verzeichnisse, wie C:\WINDOWS\TEMP ('Delay' ist eine Verzögerungsfunktion von DELAY.COM; es gibt auch Andere) @ECHO OFF ECHO. echo Vorgang: Dateien loeschen echo. echo Loescht vorbestimmte Temporaere Dateien in WINDOWS und WINDOWS\TEMP echo. echo. echo BESTAETIGUNG: choice /c:jn /t:j,7 Soll dieser Vorgang in 7 Sekunden begonnen werden? if errorlevel 2 goto ende echo. echo ABBRECHEN: echo Fenster mit der MAUS! schliessen oder Vorgang mit STRG + C unterbrechen echo. delay 10 Rem echo Ansonsten: ECHO. ECHO Loescht *.tmp - Dateien in WINDOWS und WINDOWS\TEMP delay 5 Del C:\WINDOWS\*.tmp Del C:\WINDOWS\TEMP\*.tmp ECHO. ECHO Loescht ~*.* - Dateien in WINDOWS und WINDOWS\TEMP delay 5 Del C:\WINDOWS\~*.* Del C:\WINDOWS\TEMP\~*.* delay 5 ECHO ENDE delay 5 :ende REM CLS CLS ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Schwieriger wird es, wenn man nicht ALLE Sicherungs-Dateien oder Verzeichnisse in einem Ordner löschen will, sondern nur die jeweils ältesten. Benötigt werden noch die Datei 'kn_umbr1.bat' - Bestehend aus der Zeile 'Hole ' - Ohne Umbruch, aber mit Leerzeichen am Ende - bzw. die Datei 'kn_umbr2.bat' sowie ggf. die DELAY.COM. REM ------------ REM Die Batch-Dateien befinden sich in C:\BackupGo REM ------------ delay 1 echo. echo. WRCK LOESCHEN echo Loescht alle WRCK-Verzeichnisse bis auf die letzten X ! echo X = 4 Sicherungen (soweit das hier technisch moegliche!) delay 3 call C:\WRCK\KillWRK.bat echo. REM ------------ REM Es folgt KillWRK.bat @Echo Off REM Benötigt werden noch die Datei 'kn_umbr1.bat' - hier versteckt! REM Bestehend aus der Zeile 'Hole ' REM - Ohne Umbruch, aber mit Leerzeichen am Ende! REM Sowie ggf. die delay.com REM ACHTUNG: REM KN_UMBR1.BAT listet nur Verzeichnisnamen ohne Leerzeichen korrekt REM Mit KN_UMBR2.BAT werden auch Verzeichnisnamen mit Leerzeichen gelesen REM Diese besteht aus der Zeile 'Hole "' ohne Umbruch am Ende REM Des weiteren müssen die Variablen dann mit End-" gesetzt werden. REM ACHTUNG: REM Verzeichnisse werden im DOS samt Inhalt UNWIDERBRINGLICH gelöscht! REM Mit DELTREE ohne Nachfrage! REM Rettung: Eine MS-DOS-Batch- Datei kann an den Haltepunkten mit der REM Tastenkombination 'STRG + C' abgebrochen werden REM ACHTUNG: REM Wird diese Batch-Datei mit CALL von einer anderen aufgerufen, werden REM Unterverzeichnisse im Verzeichnis der AUFRUFENDEN Datei gelöscht! REM In diesem Fall wo notwendig absolute Pfadangaben wie 'C:\...' machen. REM Bzw. mit 'CD C:\...' in das zu säubernde Verzeichnis wechseln REM ACHTUNG: REM Kopierte Verzeichnisse erhalten immer das aktuelle Datum! REM Sie sind also ggf. die jüngsten. REM Man lernt... REM VORLAUF :BACK1 echo. echo Liste das aktuelle Verzeichnis nach Datum REM echo - nur Verzeichnisse REM Vor dem gewünschten 'set' REM entfernen REM D Löscht im Ergebnis das älteste Verzeichnis zuerst set WAHL=D REM -D Löscht im Ergebnis das jüngste Verzeichnis zuerst REM set WAHL=-D REM VERZEICHNIS EINLESEN REM Ggf. enthaltendes Verzeichnis angeben CD C:\WRCK DIR /A:D /O:%WAHL% /B> C:\WRCK\Dir.txt REM HOLT Dir.txt copy C:\WRCK\Dir.txt C:\WRCK\Inhalt.txt >nul echo. REM echo Inhalt der Eingabe: echo _ type C:\WRCK\Inhalt.txt REM sort /R C:\WRCK\Inhalt.txt echo. echo - echo Ende Inhalt der Eingabe echo. echo. LOESCHT WRCK SICHERUNGEN echo. echo In der Loeschfolge echo. IF "%WAHL%"=="D" ECHO. AELTESTE ZUERST IF "%WAHL%"=="-D" ECHO. JUENGSTE ZUERST echo. REM echo. REM echo Der Vorlauf ist abgeschlossen REM echo. delay 4 REM PAUSE REM Zum testen REM entfernen: REM GOTO NEXT1 REM ---- REM Schreibe ins Zwischenlager ZW.bat type C:\WRCK\kn_umbr1.bat>C:\WRCK\ZW.bat REM Liste die Zahl der Verzeichnisse DIR | FIND "Verzeichnis(se)" | FIND /V ":" >> C:\WRCK\ZW.bat REM echo. REM echo Holen der Variablen REM echo. REM PAUSE REM Festlegen der gesuchten Variablen echo set var1=%%1>C:\WRCK\Hole.bat REM Holen derselben call C:\WRCK\ZW.bat REM echo. REM echo Erkannte Variablen: REM echo var1: '%var1%' REM echo. IF "%var1%"=="" echo. Variable 1 existiert nicht IF "%var1%"=="" GOTO NEXT1 REM echo. REM PAUSE ECHO ERGEBNIS: REM MAXIMAL 4 REM Prüfung der Anzahl der angezeigten Verzeichnisse REM Plus 0 im Stammverzeichnis: Ein Unterverzeichnis = 1 REM Plus 2 im Unterverzeichnis: Ein Unterverzeichnis = 3 REM Plus 2 im Unterverzeichnis: 4 Unterverzeichnis = 6 REM 4 nehmen; Bei 5 sind beim Start vor dem löschen 6 offen - WRCK blockiert! REM ---- REM !!WICHTIG!! REM RESTANZAHL X DER VERZEICHNISSE SORGFÄLTIG EINSTELLEN REM LETZTER HALT VOR DER ZERSTÖRUNG REM UNBEDINGT VON 0 (2) BIS INKLUSIVE X+2 ALLE EINTRAGEN IF %var1%==0 GOTO NEXT1 IF %var1%==1 GOTO NEXT1 IF %var1%==2 GOTO NEXT1 IF %var1%==3 GOTO NEXT1 IF %var1%==4 GOTO NEXT1 IF %var1%==5 GOTO NEXT1 IF %var1%==6 GOTO NEXT1 REM Anzahl X und X+2 auch in NEXT1 eintragen echo. echo. Ausfuehrung echo. REM ---- REM Eigentlich gehört hier eine FOR-Schleife hin REM Aber man kann mit den Variablen ja unterschiedliches anstellen REM VERZEICHNISSE LÖSCHEN REM Schreibe ins Zwischenlager ZW.bat type C:\WRCK\kn_umbr2.bat>C:\WRCK\ZW.bat type C:\WRCK\dir.txt >>C:\WRCK\ZW.bat REM Festlegen der gesuchten Variablen echo set var2=%%1">C:\WRCK\Hole.bat REM Holen derselben call ZW.bat echo. echo. echo Zu loeschendes Verzeichnis: echo var2: '%var2%' echo. IF "%var2%"=="" echo. Zu loeschendes Verzeichnis existiert nicht IF "%var2%"=="" GOTO NEXT1 REM PAUSE REM UND TSCHÜSS! REM IF NOT "%var2%"=="" RMDIR %var2% REM IF NOT "%var2%"=="" DELTREE %var2% REM OHNE NACHFRAGE! IF NOT "%var2%"=="" DELTREE /Y %var2% echo. IF Errorlevel 1 echo. Das Verzeichnis '%var2%' WURDE NICHT geloescht! IF Errorlevel 0 echo. Das Verzeichnis '%var2%' wurde GELOESCHT! echo. IF NOT "%var2%"=="" GOTO BACK1 REM PAUSE :NEXT1 echo. REM X / X+2 IF %var1%==6 ECHO Noch 4 Unterverzeichnisse vorhanden ECHO Keine zu loeschendenden Unterverzeichnisse erkannt! echo. delay 4 REM PAUSE REM ABSCHLUSS :ENDE1 echo. echo Ende echo. REM Beseitigt Zwischenergebnisse: del C:\WRCK\Dir.txt del C:\WRCK\Inhalt.txt del C:\WRCK\Hole.bat del C:\WRCK\ZW.bat REM RETURN: CD C:\BackupGo REM echo Schliesse in X Sekunden delay 5 REM vor CLS entfernen CLS ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ delay 1 echo. echo. RS_BACKUP LOESCHEN echo Loescht alle R&S-Backups bis auf die letzten 7 ! echo (soweit das hier technisch moegliche!) delay 3 call C:\WRCK\KillRSbk.bat echo. REM ------------ REM Es folgt KillRSbk.bat @Echo Off REM ABGELEGT IN C/WRCK; DAMIT ES NICHT DURCH SICH SELBST GELÖSCHT WIRD REM Benötigt werden noch die Datei 'kn_umbr1.bat' Hier aus C:\WINDOWS\COMMAND\ REM Bestehend aus der Zeile 'Hole ' REM - Ohne Umbruch, aber mit Leerzeichen am Ende! REM Sowie ggf. die delay.com REM ACHTUNG: REM KN_UMBR1.BAT listet nur Verzeichnisnamen ohne Leerzeichen korrekt REM Mit KN_UMBR2.BAT werden auch Verzeichnisnamen mit Leerzeichen gelesen REM Diese besteht aus der Zeile 'Hole "' ohne Umbruch am Ende REM Des weiteren müssen die Variablen dann mit End-" gesetzt werden. REM ACHTUNG: REM Verzeichnisse werden im DOS samt Inhalt UNWIDERBRINGLICH gelöscht! REM Mit DELTREE ohne Nachfrage! REM Rettung: Eine MS-DOS-Batch- Datei kann an den Haltepunkten mit der REM Tastenkombination 'STRG + C' abgebrochen werden REM ACHTUNG: REM Wird diese Batch-Datei mit CALL von einer anderen aufgerufen, werden REM Unterverzeichnisse im Verzeichnis der AUFRUFENDEN Datei gelöscht! REM In diesem Fall wo notwendig absolute Pfadangaben wie 'C:\...' machen. REM Bzw. mit 'CD C:\...' in das zu säubernde Verzeichnis wechseln REM ACHTUNG: REM Kopierte Verzeichnisse erhalten immer das aktuelle Datum! REM Sie sind also ggf. die jüngsten. REM Man lernt... REM VORLAUF :BACK1 echo. echo Liste das aktuelle Verzeichnis nach Datum REM echo - nur Verzeichnisse REM Vor dem gewünschten 'set' REM entfernen REM D Löscht im Ergebnis das älteste Verzeichnis zuerst set WAHL=D REM -D Löscht im Ergebnis das jüngste Verzeichnis zuerst REM set WAHL=-D REM VERZEICHNIS EINLESEN REM Ggf. enthaltendes Verzeichnis angeben CD C:\Ablage1\_SR32_~1 REM Ein Minus vor Verzeichnisnamen bewirkt ein Überspringen in die Endlosschleife! REM Lösung 1: Minus vor Datei Umbenennen in # REM meldet ggf. "Datei nicht gefunden" echo Benenne -* Verzeichnisse in #* um REN -* #* REM Meldung unterdrücken? REM IF EXIST -* REN -* #* DIR /A:D /O:%WAHL% /B> C:\Ablage1\_SR32_~1\Dir.txt REM HOLT Dir.txt copy C:\Ablage1\_SR32_~1\Dir.txt C:\Ablage1\_SR32_~1\Inhalt.txt >nul echo. REM echo Inhalt der Eingabe: echo _ type C:\Ablage1\_SR32_~1\Inhalt.txt REM sort /R C:\Ablage1\_SR32_~1\Inhalt.txt echo. echo - echo Ende Inhalt der Eingabe echo. echo. LOESCHT R&S BACKUP SICHERUNGEN echo. echo In der Loeschfolge echo. IF "%WAHL%"=="D" ECHO. AELTESTE ZUERST IF "%WAHL%"=="-D" ECHO. JUENGSTE ZUERST echo. REM Ohne Lösung 1 REM IF Errorlevel 1 echo. !! FEHLER: Zu Loeschender Verzeichnisnamen beginnt mit '-'! REM Mit Lösung 1 IF Errorlevel 1 echo. !! FEHLER: Doppelter Namen als Resultat einer '-' Umbenennung: IF Errorlevel 1 echo. !! Ein Verzeichnis '-...' EXISTIERT BEREITS als '#...'! REM Immer IF Errorlevel 1 GOTO ENDE2 REM echo. REM echo Der Vorlauf ist abgeschlossen REM echo. delay 4 REM PAUSE REM Zum testen REM entfernen: REM GOTO NEXT1 REM ---- REM Schreibe ins Zwischenlager ZW.bat type C:\WINDOWS\COMMAND\kn_umbr1.bat>C:\Ablage1\_SR32_~1\ZW.bat REM Liste die Zahl der Verzeichnisse DIR | FIND "Verzeichnis(se)" | FIND /V ":" >> C:\Ablage1\_SR32_~1\ZW.bat REM echo. REM echo Holen der Variablen REM echo. REM PAUSE REM Festlegen der gesuchten Variablen echo set var1=%%1>C:\Ablage1\_SR32_~1\Hole.bat REM Holen derselben call C:\Ablage1\_SR32_~1\ZW.bat REM echo. REM echo Erkannte Variablen: REM echo var1: '%var1%' REM echo. IF "%var1%"=="" echo. Variable 1 existiert nicht IF "%var1%"=="" GOTO NEXT1 REM echo. REM PAUSE ECHO ERGEBNIS: REM Maximal REM Prüfung der Anzahl der angezeigten Verzeichnisse REM Plus 0 im Stammverzeichnis: Ein Unterverzeichnis = 1 REM Plus 2 im Unterverzeichnis: Ein Unterverzeichnis = 3 REM Plus 2 im Unterverzeichnis: 4 Unterverzeichnis = 6 REM 4 nehmen; Bei 5 sind beim Start vor dem löschen 6 offen - WRCK blockiert! REM Gilt nicht für R&S REM ---- REM !!WICHTIG!! REM RESTANZAHL X DER VERZEICHNISSE SORGFÄLTIG EINSTELLEN REM LETZTER HALT VOR DER ZERSTÖRUNG REM UNBEDINGT VON 0 (2) BIS INKLUSIVE X+2 ALLE EINTRAGEN IF %var1%==0 GOTO NEXT1 IF %var1%==1 GOTO NEXT1 IF %var1%==2 GOTO NEXT1 IF %var1%==3 GOTO NEXT1 IF %var1%==4 GOTO NEXT1 IF %var1%==5 GOTO NEXT1 IF %var1%==6 GOTO NEXT1 IF %var1%==7 GOTO NEXT1 IF %var1%==8 GOTO NEXT1 IF %var1%==9 GOTO NEXT1 REM Anzahl X und X+2 auch in NEXT1 eintragen echo. echo. Ausfuehrung echo. REM ---- REM Eigentlich gehört hier eine FOR-Schleife hin REM Aber man kann mit den Variablen ja unterschiedliches anstellen REM VERZEICHNISSE LÖSCHEN REM Schreibe ins Zwischenlager ZW.bat type C:\WINDOWS\COMMAND\kn_umbr2.bat>C:\Ablage1\_SR32_~1\ZW.bat type C:\Ablage1\_SR32_~1\dir.txt >>C:\Ablage1\_SR32_~1\ZW.bat REM Festlegen der gesuchten Variablen echo set var2=%%1">C:\Ablage1\_SR32_~1\Hole.bat REM Holen derselben call ZW.bat echo. echo. echo Zu loeschendes Verzeichnis: echo var2: '%var2%' echo. IF "%var2%"=="" echo. Zu loeschendes Verzeichnis existiert nicht IF "%var2%"=="" GOTO NEXT1 REM PAUSE REM UND TSCHÜSS! REM IF NOT "%var2%"=="" RMDIR %var2% REM IF NOT "%var2%"=="" DELTREE %var2% REM OHNE NACHFRAGE! IF NOT "%var2%"=="" DELTREE /Y %var2% echo. IF Errorlevel 1 echo. Das Verzeichnis '%var2%' WURDE NICHT geloescht! IF Errorlevel 0 echo. Das Verzeichnis '%var2%' wurde GELOESCHT! echo. IF NOT "%var2%"=="" GOTO BACK1 REM PAUSE :NEXT1 echo. REM X / X+2 IF %var1%==9 ECHO Noch 7 Unterverzeichnisse vorhanden ECHO Keine zu loeschendenden Unterverzeichnisse erkannt! echo. delay 4 REM PAUSE REM ABSCHLUSS :ENDE1 echo. echo Ende echo. REM Beseitigt Zwischenergebnisse: del C:\Ablage1\_SR32_~1\Dir.txt del C:\Ablage1\_SR32_~1\Inhalt.txt del C:\Ablage1\_SR32_~1\Hole.bat del C:\Ablage1\_SR32_~1\ZW.bat REM RETURN: CD C:\BackupGo REM echo Schliesse in X Sekunden delay 5 REM vor CLS entfernen CLS :ENDE2 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯