Löschbefehl funktioniert nur wenn manuell ausgeführt wird und nicht in .bat
Guten Tag,
ich habe ein kleines Problem mit einem Script.
Ich arbeite an einem Script, welches mir am 01. jedes Monats einen Ordner mit dem Namen "%Tagesdatum%_Serverbackup_Monatssicherung" erstellt. Die restlichen Tage des Monats soll ein Ordner mit "%Tagesdatum%_Serverbackup_Tagessicherung" erstellt werden. Am Anfang jedes Monats sollen alle Ordner bis auf die Monatssicherung "%Tagesdatum%_Serverbackup_Monatssicherung" gelöscht werden.
In dem Script verwende ich einen Befehl welcher mir alle Ordner mit dem Namen "*_Serverbackup_Tagessicherung" löschen soll. Dieser Befehl funktioniert aus irgendeinem Grund nur wenn ich ihn manuell in einer Komandozeile ausführe.
Die Zeile um die es geht lautet:
Hat jemand eine Idee warum das Problem besteht?
Ich hoffe ich habe die Frage/das Problem verständlich niedergeschrieben
Der gesamte Quellcode sieht folgendermaßen aus:
ich habe ein kleines Problem mit einem Script.
Ich arbeite an einem Script, welches mir am 01. jedes Monats einen Ordner mit dem Namen "%Tagesdatum%_Serverbackup_Monatssicherung" erstellt. Die restlichen Tage des Monats soll ein Ordner mit "%Tagesdatum%_Serverbackup_Tagessicherung" erstellt werden. Am Anfang jedes Monats sollen alle Ordner bis auf die Monatssicherung "%Tagesdatum%_Serverbackup_Monatssicherung" gelöscht werden.
In dem Script verwende ich einen Befehl welcher mir alle Ordner mit dem Namen "*_Serverbackup_Tagessicherung" löschen soll. Dieser Befehl funktioniert aus irgendeinem Grund nur wenn ich ihn manuell in einer Komandozeile ausführe.
Die Zeile um die es geht lautet:
IF %vormonat% == 12 (SET /a vorjahr=%yyyy%-1 && IF EXIST %sicherungspfad%\%vorjahr%\%vormonat% (FOR /f "tokens=*" %i IN ('dir /ad /b %sicherungspfad%\%vorjahr%\%vormonat%\*%sicherungsname_%') DO RMDIR %sicherungspfad%\%vorjahr%\%vormonat%\%i /s /q)) ELSE (IF EXIST %sicherungspfad%\%yyyy%\%vormonat% (FOR /f "tokens=*" %i IN ('dir /ad /b %sicherungspfad%\%yyyy%\%vormonat%\*%sicherungsname_%') DO RMDIR %sicherungspfad%\%yyyy%\%vormonat%\%i /s /q))
Hat jemand eine Idee warum das Problem besteht?
Ich hoffe ich habe die Frage/das Problem verständlich niedergeschrieben
Der gesamte Quellcode sieht folgendermaßen aus:
:: ---------------------------------------------------------------
:: Variablen deklarieren
:: ---------------------------------------------------------------
SET dd=%DATE:~0,2%
SET mm=%DATE:~3,2%
SET yyyy=%DATE:~6,4%
SET yyyymmdd=%yyyy%_%mm%_%dd%_
SET sicherungspfad=D:\test_Sicherung
SET sicherungsname=Serverbackup_Tagessicherung
IF %dd% == 01 (SET sicherungsname=Serverbackup_Monatssicherung) ELSE (SET sicherungsname=Serverbackup_Tagessicherung && SET sicherungsname_=Serverbackup_Tagessicherung)
SET log_pfad=D:\Admin\Script\Logs\%yyyy%
SET log_dateiname="test.log"
SET log=%log_pfad%\%log_dateiname%
:: ---------------------------------------------------------------
:: Erstelle Sicherungspfad
:: ---------------------------------------------------------------
IF NOT EXIST %sicherungspfad%\%yyyy%\%mm%\%yyyymmdd%%sicherungsname% MD %sicherungspfad%\%yyyy%\%mm%\%yyyymmdd%%sicherungsname%
:: ---------------------------------------------------------------
:: ---------------------------------------------------------------
:: Löschen der Vormonats Tagessicherungen
:: ---------------------------------------------------------------
:: ---------------------------------------------------------------
:: 1.Ermittlung des Vormonats
SET /a vormonat=1%mm%-1
SET vormonat=%vormonat:~-2%
IF %vormonat% == 00 (SET vormonat=12)
:: 2.Wenn Vormonat 12, muss das Jahr minus 1 gerechnet werden um Ordner Monat 12 aus Vorjahr zu löschen.
:: Wenn nicht lösche Vormonat aus aktuellem Jahr.
IF %vormonat% == 12 (SET /a vorjahr=%yyyy%-1 && IF EXIST %sicherungspfad%\%vorjahr%\%vormonat% (FOR /f "tokens=*" %i IN ('dir /ad /b %sicherungspfad%\%vorjahr%\%vormonat%\*%sicherungsname_%') DO RMDIR %sicherungspfad%\%vorjahr%\%vormonat%\%i /s /q)) ELSE (IF EXIST %sicherungspfad%\%yyyy%\%vormonat% (FOR /f "tokens=*" %i IN ('dir /ad /b %sicherungspfad%\%yyyy%\%vormonat%\*%sicherungsname_%') DO RMDIR %sicherungspfad%\%yyyy%\%vormonat%\%i /s /q))
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 203090
Url: https://administrator.de/forum/loeschbefehl-funktioniert-nur-wenn-manuell-ausgefuehrt-wird-und-nicht-in-bat-203090.html
Ausgedruckt am: 22.04.2025 um 14:04 Uhr
5 Kommentare
Neuester Kommentar
Hallo Lightstar und willkommen im Forum!
Wenn Du innerhalb einer Zeile den Wert einer Variablen (zB %vorjahr%) veränderst, kannst Du diesen veränderten Wert nur dann in der gleichen Zeile verwenden, wenn Du "
Grüße
bastla
Wenn Du innerhalb einer Zeile den Wert einer Variablen (zB %vorjahr%) veränderst, kannst Du diesen veränderten Wert nur dann in der gleichen Zeile verwenden, wenn Du "
delayedexpansion
" benutzt - allerdings könntest Du Dir das Leben leichter machen, wenn Du einfach %vorjahr% auf jeden Fall verwendest, also (ungetestet) etwa:SET /a vormonat=1%mm%-1
SET vormonat=%vormonat:~-2%
IF %vormonat%==00 SET /a vormonat=12
SET /a vorjahr=%yyyy%
IF %vormonat%==12 SET /a vorjahr-=1
IF EXIST %sicherungspfad%\%vorjahr%\%vormonat% FOR /f "tokens=*" %%i IN ('dir /ad/b %sicherungspfad%\%vorjahr%\%vormonat%\*%sicherungsname_%') DO RD /s /q %sicherungspfad%\%vorjahr%\%vormonat%\%%i
bastla
Hallo Lightstar!

Ok, etwas ernsthafter: Im Gegensatz zur Direkteingabe in der CMD-Shell, wo nur ein Prozentzeichen zu verwenden ist, muss dieses in einem Batch für Schleifenvariablen verdoppelt werden ("gewöhnliche" Variablen werden auch im Batch
Grüße
bastla
Leider verstehe ich nur noch nicht den genauen unterschied zwischen %i und %%i!?
Der genaue Unterschied ist: %
Ok, etwas ernsthafter: Im Gegensatz zur Direkteingabe in der CMD-Shell, wo nur ein Prozentzeichen zu verwenden ist, muss dieses in einem Batch für Schleifenvariablen verdoppelt werden ("gewöhnliche" Variablen werden auch im Batch
%Variable%
geschrieben, außer bei delayedExpansion
- dann: !Variable!
) ...Grüße
bastla