Ordner per Script löschen - Wo ist mein Fehler?
Moin!
In diesem Thread - Überprüfen ob Ordner 5 Ordner enthält, wenn mehr den ältesten Ordner löschen - ist ein Code zum löschen aller Ordner, die älter sind als die 4 aktuellsten.
Leider funktioniert das nicht so ganz bei mir.
Wie genau muss ich dort bei dem Pfad angeben, wenn meine Sicherungen z.B. im Ordner "C:\Dokumente und Einstellungen\meier\Desktop\sicherung2\sicherung" liegen?
Folgendes erscheint, wenn ich die Batch-Datei aufrufe:
rd /S /Q .\sicherung\"23.03.2010"
rd /S /Q .\sicherung\"22.03.2010"
rd /S /Q .\sicherung\"19.03.2010"
rd /S /Q .\sicherung\"18.03.2010"
rd /S /Q .\sicherung\"17.03.2010"
rd /S /Q .\sicherung\"16.03.2010"
Drücken Sie eine beliebige Taste . . .
Diese Ordner sind auch die ältesten im Ordner und die 4 neuesten werden nciht aufgelistet. Soweit ist alles richtig.
Nur löscht er die 6 Ordner nicht.
Meine Batch-Datei sieht so aus und liegt im Ordner "sicherung2":
Was habe ich falsch gemacht?
Ausgeführt wird es mit einem Windows XP Client mit aktuellem SP.
In diesem Thread - Überprüfen ob Ordner 5 Ordner enthält, wenn mehr den ältesten Ordner löschen - ist ein Code zum löschen aller Ordner, die älter sind als die 4 aktuellsten.
Leider funktioniert das nicht so ganz bei mir.
Wie genau muss ich dort bei dem Pfad angeben, wenn meine Sicherungen z.B. im Ordner "C:\Dokumente und Einstellungen\meier\Desktop\sicherung2\sicherung" liegen?
Folgendes erscheint, wenn ich die Batch-Datei aufrufe:
rd /S /Q .\sicherung\"23.03.2010"
rd /S /Q .\sicherung\"22.03.2010"
rd /S /Q .\sicherung\"19.03.2010"
rd /S /Q .\sicherung\"18.03.2010"
rd /S /Q .\sicherung\"17.03.2010"
rd /S /Q .\sicherung\"16.03.2010"
Drücken Sie eine beliebige Taste . . .
Diese Ordner sind auch die ältesten im Ordner und die 4 neuesten werden nciht aufgelistet. Soweit ist alles richtig.
Nur löscht er die 6 Ordner nicht.
Meine Batch-Datei sieht so aus und liegt im Ordner "sicherung2":
@echo off
:MaxBackupUeberpruefen
set "maximum=4"
FOR /F "skip=%maximum% delims=" %%i in ('dir /O-D /B /AD .\sicherung\') do
echo rd /S /Q .\sicherung\"%%i"
pause
GOTO :EOF
Ausgeführt wird es mit einem Windows XP Client mit aktuellem SP.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 139529
Url: https://administrator.de/contentid/139529
Ausgedruckt am: 22.11.2024 um 17:11 Uhr
5 Kommentare
Neuester Kommentar
Moin User1234,
ergänzend zu bastlas Kommentar, noch zwei kleine Haarspaltereien.
Eigentlich ist eines eher überflüssig, nämlich die umschließenden Anführungszeichen in ....) DO echo rd /S /Q .\sicherung\"%%i" , was ja aufgelöst auch so aussieht: ...rd /S /Q .\sicherung\"23.03.2010". Schadet zwar nix, aber der Sinn von umschließenden Anführungszeichen "zur Sicherheit", falls mal Leerzeichen um wegzuknallenden Pfad enthalten sein sollten, dieser Sinn würde besser dann erfüllt, wenn der komplette Pfad umschlossen wird.
Empfehlung:
Ersetze ...DO echo rd /S /Q .\sicherung\"%%i"
Durch ...DO echo rd /S /Q ".\sicherung\%%i" .
Zweitens bietet der relativ angegebene Pfad ".\sicherung\....", also unterhalb des gerade aktuellen Verzeichnis im Unterverzeichnis "sicherung" nur trügerische Sicherheit.
Denn wenn sich der oben stehende Batch auch im "richtigen" Verzeichnis befindet, so kann doch der Batch aus einem ganz anderen aktiven Verzeichnis (e.g. vom Desktop oder per Aufruf vom CMD-Prompt aus einem Verzeichnis F:\firlefanz) gestartet worden sein.
Empfehlung:
- entweder im Batch mit vollständigen Pfaden arbeiten (macht dem Batch nix aus)
- oder mit PushD/PopD (siehe Hilfen zu beiden Befehlen am CMD-Prompt) in das gewollte Verzeichnis wechseln, rumrandalieren und das vorherige Verzeichnis wiederherstellen.
Grüße
Biber
ergänzend zu bastlas Kommentar, noch zwei kleine Haarspaltereien.
Eigentlich ist eines eher überflüssig, nämlich die umschließenden Anführungszeichen in ....) DO echo rd /S /Q .\sicherung\"%%i" , was ja aufgelöst auch so aussieht: ...rd /S /Q .\sicherung\"23.03.2010". Schadet zwar nix, aber der Sinn von umschließenden Anführungszeichen "zur Sicherheit", falls mal Leerzeichen um wegzuknallenden Pfad enthalten sein sollten, dieser Sinn würde besser dann erfüllt, wenn der komplette Pfad umschlossen wird.
Empfehlung:
Ersetze ...DO echo rd /S /Q .\sicherung\"%%i"
Durch ...DO echo rd /S /Q ".\sicherung\%%i" .
Zweitens bietet der relativ angegebene Pfad ".\sicherung\....", also unterhalb des gerade aktuellen Verzeichnis im Unterverzeichnis "sicherung" nur trügerische Sicherheit.
Denn wenn sich der oben stehende Batch auch im "richtigen" Verzeichnis befindet, so kann doch der Batch aus einem ganz anderen aktiven Verzeichnis (e.g. vom Desktop oder per Aufruf vom CMD-Prompt aus einem Verzeichnis F:\firlefanz) gestartet worden sein.
Empfehlung:
- entweder im Batch mit vollständigen Pfaden arbeiten (macht dem Batch nix aus)
- oder mit PushD/PopD (siehe Hilfen zu beiden Befehlen am CMD-Prompt) in das gewollte Verzeichnis wechseln, rumrandalieren und das vorherige Verzeichnis wiederherstellen.
Grüße
Biber
Hallo user1234!
oder (als Ersatz der Zeile 6):
Um eine Sortierung nach dem Erstellungsdatum zu erreichen, kannst Du als zusätzliche Option "/tc" verwenden - siehe dazu "
Grüße
bastla
Wie kann ich denn in dem Code einen vollständigen Pfad angeben?
Etwa so:@echo off & setlocal
set "Ordner=D:\Sicherung"
:MaxBackupUeberpruefen
set "maximum=4"
for /f "skip=%maximum% delims=" %%i in ('dir /o-d /b /ad "%Ordner%"') do echo rd /S /Q "%Ordner%\%%i"
pause
pushd "%Ordner%"
for /f "skip=%maximum% delims=" %%i in ('dir /o-d /b /ad') do echo rd /S /Q "%%i"
popd
Das Script löscht alle Ordner, anhand des "Geändert am" Datum. Sehe ich das richtig?
Das siehst Du einerseits richtig und andererseits, indem Du den (gesamten) "dir
"-Befehl an der Kommandozeile eingibst ...Um eine Sortierung nach dem Erstellungsdatum zu erreichen, kannst Du als zusätzliche Option "/tc" verwenden - siehe dazu "
dir /?
"Grüße
bastla