Probleme beim Auslesen einer Umgebungsvariablen
Hallo liebe Leute,
ich schreibe gerade an einer Batchdatei zum Löschen von Logfiles, die in Ordnern abgelegt sind deren Namen nach Datum vergeben wird (YYYYMMDD). Hierzu benutze ich das Shareware-Tool XSET.
Ich habe schon hinbekommen, wie ich das Datum Umformatieren kann, dieses schreibe ich in eine Umgebungsvariable und kann es auch wieder auslesen. Mein Problem ist nun, dass ich in einer FOR Schleife den Dateinamen mit dem aktuellen Datum (dem aus der Umgebungsvariable) vergleiche und den Unterschied wiederum in einer Umgebungsvariablen speichere. Nur leider kommt beim Auslesen nicht das raus, was drinstehen sollte.
Hier mein Code :
Wie Ihr sehen könnt lasse ich mir innerhalb der Schleife den Wert aller Variablen ausgeben.
In dieser Ausgabe steht der Wert für _DIFF auch korrekt drin, nur beim Auslesen in der IF Abfrage kommt der Wert an, der vor Aufruf des Skripts in der Variablen stand (Leer, wenn sie nicht definiert war).
Ich hoffe Ihr könnt mir helfen und danke schon einmal im Voraus.
ich schreibe gerade an einer Batchdatei zum Löschen von Logfiles, die in Ordnern abgelegt sind deren Namen nach Datum vergeben wird (YYYYMMDD). Hierzu benutze ich das Shareware-Tool XSET.
Ich habe schon hinbekommen, wie ich das Datum Umformatieren kann, dieses schreibe ich in eine Umgebungsvariable und kann es auch wieder auslesen. Mein Problem ist nun, dass ich in einer FOR Schleife den Dateinamen mit dem aktuellen Datum (dem aus der Umgebungsvariable) vergleiche und den Unterschied wiederum in einer Umgebungsvariablen speichere. Nur leider kommt beim Auslesen nicht das raus, was drinstehen sollte.
Hier mein Code :
@echo offREM Fülle die Variable _dat mit dem aktuellen Datum in der Form YYYYMMDDcall XSET32 _dat DATE YYYYMMDDREM Danach wechsle ins Verzeichnis für die LogfilesC:cd \historyREM Suche nach allen Verzeichnissen in C:\historyfor /D %%t in (*) do ( REM Vergleiche aktuellen Verzeichnisnamen mit Datum in _dat auf Tagesbasis CALL XSET32 _DIFF DIFFDATE %%t %_dat% REM Dies ist zu Debugzwecken ======= set pause REM Debugende ====================== REM Wenn Alter des Logverzeichnisses grösser als 10 Tage dann Löschen if "%_DIFF%" GEQ 10 (:: del /Q .\%%t\*.* echo Verzeichnis wird geloescht, weil %_DIFF% aelter als 10 Tage ) else ( echo Verzeichnis wird nicht geloescht, weil %_DIFF% juenger als 10 Tage ))
Wie Ihr sehen könnt lasse ich mir innerhalb der Schleife den Wert aller Variablen ausgeben.
In dieser Ausgabe steht der Wert für _DIFF auch korrekt drin, nur beim Auslesen in der IF Abfrage kommt der Wert an, der vor Aufruf des Skripts in der Variablen stand (Leer, wenn sie nicht definiert war).
Ich hoffe Ihr könnt mir helfen und danke schon einmal im Voraus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 31144
Url: https://administrator.de/contentid/31144
Ausgedruckt am: 25.11.2024 um 15:11 Uhr
3 Kommentare
Neuester Kommentar
Moin lobotomie,
such mal hier über der Forumssuche noch "DelayedExpansion".
Da findest Du die Herleitung und die Workarounds zu diesem Feature/diesem Effekt.
Ein möglicher Workaround kurz skizziert:
--> Aber: such auch mal nach dem Thema: "Alle Dateien älter als x Tage löschen" oder so hier im Forum oder auch nach der "DelAge32.exe". Die habe ich schon mehrfach hier empfohlen.
Diesen XSET-Krams brauchst Du eigentlich auch nicht mehr, wenn Du nicht grad noch auf einem Win98-Rechner rumschrapelst...
Hope That Helps
Biber
such mal hier über der Forumssuche noch "DelayedExpansion".
Da findest Du die Herleitung und die Workarounds zu diesem Feature/diesem Effekt.
Ein möglicher Workaround kurz skizziert:
....
...
for /D %%t in (*) do call :Diffdate %%t
goto :eof
:DiffDate
REM Vergleiche aktuellen Verzeichnisnamen mit Datum in _dat auf Tagesbasis
CALL XSET32 _DIFF DIFFDATE %1 %_dat%
REM Dies ist zu Debugzwecken =======
set
pause
REM Debugende ======================
REM Wenn Alter des Logverzeichnisses grösser als 10 Tage dann Löschen
REM ---------> so kann der Vergleich nicht passen!!!! --->>> if "%_DIFF%" GEQ 10 (
if [%_DIFF%] GEQ [10] (
REM ##noch nicht scharf### del /Q .\%1\*.*
echo Verzeichnis .\%1 wird geloescht, weil %_DIFF% aelter als 10 Tage
) else (
echo Verzeichnis wird nicht geloescht, weil %_DIFF% juenger als 10 Tage
)
--> Aber: such auch mal nach dem Thema: "Alle Dateien älter als x Tage löschen" oder so hier im Forum oder auch nach der "DelAge32.exe". Die habe ich schon mehrfach hier empfohlen.
Diesen XSET-Krams brauchst Du eigentlich auch nicht mehr, wenn Du nicht grad noch auf einem Win98-Rechner rumschrapelst...
Hope That Helps
Biber
Moin lobo,
wenn Du sicherstellen kannst (also vorher prüfst), dass %_DIFF% nicht leer ist, dann kannst du auch einen Zahlenwert-Vergleich machen:
if %_DIFF% GEQ 10 ( .....blafasel...
ich hatte nur die -Begrenzer drumherum gesetzt, weil es bei leerer %_DIFF%-Variable sonst einen Syntax-Error gäbe.
if %_DIFF% GEQ 10 ( ..blablubb... <---bei nicht definierter %_DIFF% --Crash & Burn
Aber "mein" Vergleich ich natürlich dadurch ein String-Vergleich geworden.
Nimm Du lieber den numWert-nunWert-Vergleich.
if %_DIFF% GEQ 10 ( ....sülzdibülz....
Gruß
Biber
wenn Du sicherstellen kannst (also vorher prüfst), dass %_DIFF% nicht leer ist, dann kannst du auch einen Zahlenwert-Vergleich machen:
if %_DIFF% GEQ 10 ( .....blafasel...
ich hatte nur die -Begrenzer drumherum gesetzt, weil es bei leerer %_DIFF%-Variable sonst einen Syntax-Error gäbe.
if %_DIFF% GEQ 10 ( ..blablubb... <---bei nicht definierter %_DIFF% --Crash & Burn
Aber "mein" Vergleich ich natürlich dadurch ein String-Vergleich geworden.
Nimm Du lieber den numWert-nunWert-Vergleich.
if %_DIFF% GEQ 10 ( ....sülzdibülz....
Gruß
Biber