Batch soll Verzeichnisse und Dateien löschen die älter als 3 Tage UND leer sind
Hallo Helferlein.
Ich möchte auf unserem Server gern einen Job laufen lassen,
welcher mir die Arbeit erleichtert. Dafür ist sowas ja da.
Und zwar, wie im Titel beschrieben:
Dateien und Ordner sollen gelöscht werden wenn
- sie leer nicht
UND
- älter als 3 Tage sind
Ich möchte keine exe verwenden!!!
Nur BATCH oder VBS.
Bitte helft..
Vielen Dank!
Gruß
Alex
Ich möchte auf unserem Server gern einen Job laufen lassen,
welcher mir die Arbeit erleichtert. Dafür ist sowas ja da.
Und zwar, wie im Titel beschrieben:
Dateien und Ordner sollen gelöscht werden wenn
- sie leer nicht
UND
- älter als 3 Tage sind
Ich möchte keine exe verwenden!!!
Nur BATCH oder VBS.
Bitte helft..
Vielen Dank!
Gruß
Alex
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 102646
Url: https://administrator.de/contentid/102646
Ausgedruckt am: 25.11.2024 um 19:11 Uhr
8 Kommentare
Neuester Kommentar
hm... Mit Datum in einer Batch rechen ist eklig. Angeblich geht das mit VBS ganz einfach, damit kenne ich mich aber nicht aus. Hier hättest du schon mal alle Verzeichnisse, die leer sind, und das Datum dazu auch, bezogen auf das Verzeichnis, aus dem die Batch gestartet wurde, ohne Unterverzeichnisse.
@echo off & setlocal
FOR /F %%i IN ('dir /aD /b ') DO call :checkIfEmpty "%%i"
goto :eof
:checkIfEmpty
::Wenn es kein Verzeichns ist, ist doof
if not exist "%~1\*.*" goto :eof
if exist "%~1\*.*" dir /a-D "%~1\*.*" >nul 2>nul
if "%errorlevel%"=="1" echo "%~1" ist leer!
if "%errorlevel%"=="0" goto :eof
::mal nachgucken, wie alt das Verzeichnis ist...
set dirDate=%~t1
echo Das Verzeichnis ist vom %dirDate%.
goto :eof
Und hier wären dann die leeren Dateien:
FOR /F %%i IN ('dir /a-D /b ') DO call :checkIfEmpty1 "%%i"
:checkIfEmpty1
::Wenn es ein Verzeichns ist, ist doof
if exist "%~1\*.*" goto :eof
::mal nachgucken, wie alt die Datei ist...
set fileDate=%~t1
set fileSize=%~z1
if not "%fileSize%"=="0" goto :eof
echo Die Datei "%~1"" ist vom %dirDate% und leer.
goto :eof
@Ren
Anstelle von "-1" für "gestern" die gewünschte Tagedifferenz in %TDiff% festlegen.
Um in einem Batch vergleichen zu können, wird wohl die Umwandlung beider Datumswerte in das Format "JJJJMMTT" am sinnvollsten sein (dann hast Du de facto "Zahlen") - daher auch das Script in der Fassung mit der Lizenz zum "Datum selber bauen" (Tag, Monat und Jahr werden getrennt zurückgegeben) ...
Grüße
bastla
Angeblich geht das mit VBS ganz einfach
Kannst Du ja selbst beurteilen:@echo off & setlocal
set TDiff=-1
set g=%Temp%\Gestern.vbs
>%g% echo g=DateAdd("d",%TDiff%,Date):WScript.Echo Left(g,2),Mid(g,4,2),Right(g,4)
for /f "tokens=1-3" %%i in ('cscript //nologo %g%') do set "Gestern=%%i.%%j.%%k"
del %g%
echo %Gestern%
Um in einem Batch vergleichen zu können, wird wohl die Umwandlung beider Datumswerte in das Format "JJJJMMTT" am sinnvollsten sein (dann hast Du de facto "Zahlen") - daher auch das Script in der Fassung mit der Lizenz zum "Datum selber bauen" (Tag, Monat und Jahr werden getrennt zurückgegeben) ...
Grüße
bastla
Na, dann will ich mich auch nicht lumpen lassen.
Mein Ansatz:
1) Wenn es so ein Sahnetool wie Horst Schaffers DelAge32 gibt, kann es keinen vernünftigen Grund geben, diese Funktionalität mit ein paar VBSkript/Batchzeilen neu erfinden zu wollen.
2) Um irgendwelche quengeligen Ich-will-aber-Anwender zufrieden (oder zumindest ruhig) zu stellen, würde ich den VBSkript-Oneliner so gestalten (Demo am CMD-Prompt): Zeile für Zeile Copy & Pasten as is.
%temp%\isolder.vbs anlegen
Proof-of-Concept: welche Dateien t*.txt sind älter als (beispielsweise) 80 Tage:
Zeilen mit ">" beginnend sind die Test-Befehle, der Rest ist Ausgabe.
Gefühlter Vorteil meiner Variante:
In Kauf genommene Nachteile:
Aber damit wir hier endlich einen Haken an das Thema bekommen...
Grüße
Biber
Mein Ansatz:
1) Wenn es so ein Sahnetool wie Horst Schaffers DelAge32 gibt, kann es keinen vernünftigen Grund geben, diese Funktionalität mit ein paar VBSkript/Batchzeilen neu erfinden zu wollen.
2) Um irgendwelche quengeligen Ich-will-aber-Anwender zufrieden (oder zumindest ruhig) zu stellen, würde ich den VBSkript-Oneliner so gestalten (Demo am CMD-Prompt): Zeile für Zeile Copy & Pasten as is.
%temp%\isolder.vbs anlegen
set g=%Temp%\IsOlder.vbs
>%g% echo wscript.echo wscript.quit (1+(DateDiff("d",wscript.arguments(0),date) ^> int(wscript.arguments(1))))
Proof-of-Concept: welche Dateien t*.txt sind älter als (beispielsweise) 80 Tage:
Zeilen mit ">" beginnend sind die Test-Befehle, der Rest ist Ausgabe.
>for %i in (t*.txt) do @cscript //nologo %g% "%~ti" 80 && echo "%~ti" älter als 80 Tage: %i
"23.01.07 10:52" älter als 80 Tage: target4.txt
"24.10.06 19:12" älter als 80 Tage: teltarif_2006-10-02_171541.txt
"24.01.07 00:00" älter als 80 Tage: test37.txt
"20.02.08 12:24" älter als 80 Tage: test97.txt
"20.02.08 12:24" älter als 80 Tage: test98.txt
"20.02.08 12:24" älter als 80 Tage: test99.txt
"26.02.08 20:57" älter als 80 Tage: testout.txt
"08.05.08 10:32" älter als 80 Tage: testrar.txt
"04.06.08 18:26" älter als 80 Tage: testset.txt
"07.07.08 12:04" älter als 80 Tage: text.txt
"30.10.07 19:23" älter als 80 Tage: tmp2.txt
(=21:37:31 D:\temp=)
>for %i in (t*.txt) do @cscript //nologo %g% "%~ti" 80 || echo "%~ti" nicht älter als 80 Tage: %i
"15.09.08 17:45" nicht älter als 80 Tage: text27.txt
"20.11.08 12:45" nicht älter als 80 Tage: tmp3.txt
Gefühlter Vorteil meiner Variante:
- Ich übergebe den Wert "Differenz in Tagen" als Parameter, habe also -falls ich die ISOlder.vbs Nicht als Temp-Datei, sondern als Utility dauerhaft nutzen wollte, ein Mindestmaß an Flexibilität
- Da ich nur True/False bzw Errorlevel 0 oder 1 zurückgebe, brauche ich nicht mit dem blöden Datum rumrechnen im Batch
In Kauf genommene Nachteile:
- ist kryptisch und fast unwartbar
- und, da keine Ausgabe des Datums oder auch nur der Datumsdifferenz erfolgt, muss man/frau das Funktionieren dieses Schnipsels entweder vorher ausgiebig testen.... oder halt glauben...
- es ist natürlich Dönekens, für 1000 Dateien 1000x vom Batch aus eine Zeile VBS aufzurufen. Es sollte komplett in einem VBS-Schnipsel abgefackel werden.
- größter Nachteil: es ist - verglichen mit DelAge32 natürlich so langsam wie ein Scharping spricht.
Aber damit wir hier endlich einen Haken an das Thema bekommen...
Grüße
Biber