Batch Programmierung CleanTemp
Hallo,
mit:
lösche ich den Inhalt des Temp-Verzeichnisses.
Wie kann ich die gelöschten Dateien und Verzeichnisse mitzählen?
Gruß
Peter
mit:
@echo off
echo %tmp%
del "%tmp%\*.*" /s /q /f
FOR /d %%p IN ("%tmp%\*.*") DO rmdir "%%p" /s /q
lösche ich den Inhalt des Temp-Verzeichnisses.
Wie kann ich die gelöschten Dateien und Verzeichnisse mitzählen?
Gruß
Peter
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 578087
Url: https://administrator.de/forum/batch-programmierung-cleantemp-578087.html
Ausgedruckt am: 10.04.2025 um 18:04 Uhr
13 Kommentare
Neuester Kommentar
Guten Morgen Peter,
ggf. per Logfile?
/LOG:LOGDATEI.txt

@echo off
set cntfiles=0
set cntfolders=0
for /f "delims=" %%a in ('dir /b /s /a-d "%temp%"') do (del "%%a" >nul 2>&1 && set /a cntfiles+=1)
for /f "delims=" %%a in ('dir /b /ad "%temp%"') do (rd "%TEMP%\%%a" /s /q >nul 2>&1 && set /a cntfolders+=1)
echo Geloeschte Dateien : %cntfiles%
echo Geloeschte Ordner: %cntfolders%

Viele Wege führen nach Rom...
for /f "delims=" %%a in ('powershell -EP Bypass -C "[environment]::GetEnvironmentVariable('TEMP','Machine')"') do set "systemp=%%a"

Zitat von @PeterleB:
Die Ausgabeumleitung
bedeutet doch, dass alle Fehlermeldungen ins Nirvana geschickt werden.
Die Meldungen ja, aber der Exit-Status den der Befehl ausgibt ist immer noch auswertbar.Die Ausgabeumleitung
>>nul 2>&1
>
bedeutet doch, dass alle Fehlermeldungen ins Nirvana geschickt werden.
Dann zählen doch cntfiles und cntfolders alle Löschversuche, auch die, wo ein Zugriff verweigert ist.
Nein! Denn ich verwende nachstehend das && und das führt den SET Befehl nur aus wenn beim vorherigen Befehl kein Fehler aufgetreten ist Das noch zu unterscheiden, wird wohl sehr schwierig?
Nö, das hatte ich ja schon berücksichtigt 
Zitat von @PeterleB:
Hallo,
wo gibt es denn eine so detaillierte Dokumentation, dass man selbst mal schlauer wird?
https://de.m.wikibooks.org/wiki/Batch-Programmierung:_Batch-OperatorenHallo,
wo gibt es denn eine so detaillierte Dokumentation, dass man selbst mal schlauer wird?
https://ss64.com
https://www.robvanderwoude.com/batchstart.php
Würde aber stattdessen gleich mit Powershell anfangen, Batch ist ehrlich gesagt schon über der Halbwertszeit.
Könnte man dennoch feststellen, wieviel Dateien /Ordner nicht gelöscht werden konnten?
hinter das bestehendes Set anfügen. Was |

Nein, aber du bist in eine der diversen Bugs in der Batch gefallen, die wohl niemals mehr von MS gefixed werden. RD und DEL geben je nach Fehlermeldung falsche Exit-Codes zurück, hier brauchst du einen Workaround.
Siehe
https://stackoverflow.com/questions/11137702/rd-exits-with-errorlevel-se ...
Noch ein Grund mehr lieber gleich zur Powershell über zu gehen!
Das man bei laufendem Betrieb den Temp-Ordner meist nie ganz leer bekommt, liegt in der Natur der Sache. Anwendungen haben dort meist Dateien im ständigen Zugriff, die man denen eben nicht einfach so unter den Füßen weg ziehen kann ohne das sie einem das übel nehmen würden
.
So ich bin hier jetzt raus - zu viel von dem 80er Batch Zeug rauchen ist schlecht für die Gesundheit
.
Siehe
https://stackoverflow.com/questions/11137702/rd-exits-with-errorlevel-se ...
for /f "delims=" %%a in ('dir /b /s /a-d "%temp%"') do ( 3>nul 2>&1 1>&3 del /F "%%a" | findstr "^" >nul && set /a cnterrors+=1 || set /a cntfiles+=1)
for /f "delims=" %%a in ('dir /b /ad "%temp%"') do ( 3>nul 2>&1 1>&3 rd "%TEMP%\%%a" /s /q | findstr "^" >nul && set /a cnterrors+=1 || set /a cntfolders+=1)
REM usw.
Das man bei laufendem Betrieb den Temp-Ordner meist nie ganz leer bekommt, liegt in der Natur der Sache. Anwendungen haben dort meist Dateien im ständigen Zugriff, die man denen eben nicht einfach so unter den Füßen weg ziehen kann ohne das sie einem das übel nehmen würden
So ich bin hier jetzt raus - zu viel von dem 80er Batch Zeug rauchen ist schlecht für die Gesundheit