Batchdatei - Verzeichnisse löschen die älter sind als
Hallo Zusammen
Ich komme nicht weiter mit meinem Script. In meiner batch-Datei möchte ich noch hinzufügen, dass es mir alle Verzeichnisse löscht,
welche älter sind als 6 Monate.
Also zuerst zu meinem Script. Es ist ein Script, welches mir mit NTBackup Images auf meine externe Festplatte erstellt.
Es erstellt mir jeweils gleich ein Ordner mit dem aktuellen Datum und Zeit. Die Ordner werden mir folgendermassen beschriftet:
17-02-2010--09-25
18-02-2010--13-54
usw.
Jetzt versuche ich die Verzeichnisse zu löschen, welche älter als 6 Monate sind. Und dies gleich in mein Script einbauen.
Geht das, dass er den Ordnernamen nach der Zeit überprüft und löscht? Oder wäre es besser, wenn er das Erstelldatum abfragt und
dann die älteren löscht? Kann mir jemand mit dem Befehl helfen?
Hier seht ihr noch mein Script:
Vielen Dank im Voraus für eure Hilfe
Grüsse
PaceLu
Ich komme nicht weiter mit meinem Script. In meiner batch-Datei möchte ich noch hinzufügen, dass es mir alle Verzeichnisse löscht,
welche älter sind als 6 Monate.
Also zuerst zu meinem Script. Es ist ein Script, welches mir mit NTBackup Images auf meine externe Festplatte erstellt.
Es erstellt mir jeweils gleich ein Ordner mit dem aktuellen Datum und Zeit. Die Ordner werden mir folgendermassen beschriftet:
17-02-2010--09-25
18-02-2010--13-54
usw.
Jetzt versuche ich die Verzeichnisse zu löschen, welche älter als 6 Monate sind. Und dies gleich in mein Script einbauen.
Geht das, dass er den Ordnernamen nach der Zeit überprüft und löscht? Oder wäre es besser, wenn er das Erstelldatum abfragt und
dann die älteren löscht? Kann mir jemand mit dem Befehl helfen?
Hier seht ihr noch mein Script:
@echo off
@title Datensicherung
@color 1F
rem ##################################################
rem # NTBackup-Sicherung auf Platte (v 2005090201) #
rem # """"""""""""""""""""""""""""""""""""""""""""""""""" #
rem ##################################################
rem Skript und .bks Dateien in E:\Backup
set configdisk=E:
set configdir=%configdisk%\Backup\
set configbksfile=Backup.bks
rem Datensicherung nach E:\Backup (auf Festplatte)
set backupdir=E:\Backup
rem Name des Servers
set serverbackup=%COMPUTERNAME%
rem ##########################################################
rem # evtl. Ergänzung für mehrtägige Sicherung hier einfügen #
rem ##########################################################
%configdisk%
cd %configdir%
rem ### Datensicherung ###
rem **** Zeitstempel-String erzeugen ****
for /f "Tokens=1-4 Delims=/. " %%i in ('date /t') do set dt=%%i-%%j-%%k-%%l
for /f "Tokens=1" %%i in ('time /t') do set tm=-%%i
set tm=%tm::=-%
set dtt=%dt%%tm%
rem **** Sicherung starten *****
echo Sicherung Datei-Daten von %serverbackup%
ntbackup backup "@%configdir%\%configbksfile%" ^
/n "%serverbackup%-Backup Dateidaten" ^
/d "%serverbackup%-Sicherung Dateidaten" ^
/v:YES /r:no /rs:no /hc:off /m normal ^
/l:f /f "%backupdir%\%dtt%\%serverbackup%.bkf"
exit
Vielen Dank im Voraus für eure Hilfe
Grüsse
PaceLu
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 18.02.2010 um 17:11:18 Uhr
Beitrag von "Anleitung" auf "Frage" geändert und Codeformatierung nachgetragen.
Content-ID: 136305
Url: https://administrator.de/forum/batchdatei-verzeichnisse-loeschen-die-aelter-sind-als-136305.html
Ausgedruckt am: 23.12.2024 um 12:12 Uhr
5 Kommentare
Neuester Kommentar
Hallo PaceLu,
in Batchdateien kannst du nicht mit DateTime-Werten rechnen. Was aber gehen sollte: 7 Monate zurück rechnen (unabhängig vom Tag) und alles löschen, was dem Format XX-07-2009-* entspricht. Das bedeutet, dass immer beim ersten Aufruf in einem neuen Monat genau die Verzeichnisse gelöscht werden, die älter als 6 und neuer als 8 Monate sind. Häng mal diesen Schnipsel an:
Zum scharf machen entferne das ECHO vor rd, falls die richtigen Verzeichnisse gefunden werden.
Grüße
rubberman
in Batchdateien kannst du nicht mit DateTime-Werten rechnen. Was aber gehen sollte: 7 Monate zurück rechnen (unabhängig vom Tag) und alles löschen, was dem Format XX-07-2009-* entspricht. Das bedeutet, dass immer beim ersten Aufruf in einem neuen Monat genau die Verzeichnisse gelöscht werden, die älter als 6 und neuer als 8 Monate sind. Häng mal diesen Schnipsel an:
for /f "delims=- tokens=2,3" %%a in ("%dtt%") do set "monat=%%a" &set /a jahr=%%b
if %monat:~,1%==0 set "monat=%monat:~1%"
set /a monat-=7
if %monat% lss 1 (
set /a monat+=12
set /a jahr-=1
)
if %monat% lss 10 set "monat=0%monat%"
set "pattern=[0-3]*[0-9]-%monat%-%jahr%-"
pushd "%backupdir%"
for /d %%a in (*) do (echo %%a|findstr /r /c:"^%pattern%">nul&&ECHO rd /s /q "%%a")
popd
Grüße
rubberman
Hallo PaceLu,
ob bei ntbackup oder blat der Fehler im Detail liegt, kann ich nicht sagen, da ich diese Tools nicht nutze.
Aber in Zeile 81 solltest du nur das echo vor dem rd entfernen, also
Sonst habe ich nichts gesehen, was einen Abbruch provozieren könnte.
BTW:In Zeile 61 bekommst du das älteste File, da von neu nach alt sortiert wird und somit das älteste letztlich in der Variablen stehen bleibt. Nutze /o-d statt /od.
Edit: Sorry. Das war natürlich Unsinn.
Grüße
rubberman
ob bei ntbackup oder blat der Fehler im Detail liegt, kann ich nicht sagen, da ich diese Tools nicht nutze.
Aber in Zeile 81 solltest du nur das echo vor dem rd entfernen, also
for /d %%a in (*) do (echo %%a|findstr /r /c:"^%pattern%">nul&&rd /s /q "%%a")
Edit: Sorry. Das war natürlich Unsinn.
Grüße
rubberman