Löschen der ältesten Datei im Unterverzeichnis.
Moin Leutz hätte da ein kleines Prob. mit einem Batch file
Ich soll zur Zeit eine Batch Datei schreiben, die es ermöglicht die ältesten Dateien in einem angegebenen Dateipfad zu löschen unter den Bedingungen das:
a -die Festplatte nur noch wehnig speicherplatz enthält. (z.b. 1 GB)
b -Das Batch nur eine Geringe Priorität besitzt um nicht das System auszubremsen.
c -Nur in den angegebenen Pfad ausgewälte Dateien gelöscht werden. (z.b. nur JPG im Ordner D:\fd)
d -Dabei sollen alle Ordnerinhalte (auch Unterordner) mit dem Änderungsdatum vergleichen werden und die älteste Datei gelöscht.
Das ganze soll rellativ schnell unter der Bedingung "a" wiederholt werden.
bisher schaut mein Programm so aus:
::-----------------------------------------------------------------
@echo off & setlocal
if "%1"=="" (
start /WAIT /LOW /B cmd.exe /V /C %~s0 weiter_machen
goto:eof
)
:start
set LW=C:
FOR /F "tokens=3 delims= " %%i in ('dir %LW% /-c') do set Frei=%%i
if %frei% gtr 1000000000 goto vok
set "Ordner=D:\db"
for /f "delims=" %%i in ('dir /b /o-d "%Ordner%"') do set "Alt=%Ordner%\%%i"
del "%Alt%" /s /q
pause
:vok
sleep 60
goto start
pause
::----------------------------------------------------------------
Ich bekomme es nur nicht hin das der "dir" Befehl unterordner mit einbezieht b.z.w. die änderungsdaten vergleicht.
Hoffe jemand kann mir helfen.
LG kai
Ich soll zur Zeit eine Batch Datei schreiben, die es ermöglicht die ältesten Dateien in einem angegebenen Dateipfad zu löschen unter den Bedingungen das:
a -die Festplatte nur noch wehnig speicherplatz enthält. (z.b. 1 GB)
b -Das Batch nur eine Geringe Priorität besitzt um nicht das System auszubremsen.
c -Nur in den angegebenen Pfad ausgewälte Dateien gelöscht werden. (z.b. nur JPG im Ordner D:\fd)
d -Dabei sollen alle Ordnerinhalte (auch Unterordner) mit dem Änderungsdatum vergleichen werden und die älteste Datei gelöscht.
Das ganze soll rellativ schnell unter der Bedingung "a" wiederholt werden.
bisher schaut mein Programm so aus:
::-----------------------------------------------------------------
@echo off & setlocal
start /WAIT /LOW /B cmd.exe /V /C %~s0 weiter_machen
goto:eof
)
:start
set LW=C:
FOR /F "tokens=3 delims= " %%i in ('dir %LW% /-c') do set Frei=%%i
if %frei% gtr 1000000000 goto vok
set "Ordner=D:\db"
for /f "delims=" %%i in ('dir /b /o-d "%Ordner%"') do set "Alt=%Ordner%\%%i"
del "%Alt%" /s /q
pause
:vok
sleep 60
goto start
pause
::----------------------------------------------------------------
Ich bekomme es nur nicht hin das der "dir" Befehl unterordner mit einbezieht b.z.w. die änderungsdaten vergleicht.
Hoffe jemand kann mir helfen.
LG kai
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 176080
Url: https://administrator.de/forum/loeschen-der-aeltesten-datei-im-unterverzeichnis-176080.html
Ausgedruckt am: 19.05.2025 um 15:05 Uhr
7 Kommentare
Neuester Kommentar

joMän
Dort, wo du das gefunden hast, stand sicherlich auch wie und für was es genutzt wird.
Was macht ?
Was sagt dir /?
/scheibenkleister
Moin Leutz hätte da ein kleines Prob. mit einem Batch file
bisher schaut mein Programm so aus:
::-----------------------------------------------------------------
@echo off & setlocal
bisher schaut mein Programm so aus:
::-----------------------------------------------------------------
@echo off & setlocal
Dort, wo du das gefunden hast, stand sicherlich auch wie und für was es genutzt wird.
Ich bekomme es nur nicht hin das der "dir" Befehl unterordner mit einbezieht b.z.w. die änderungsdaten vergleicht.
Grass - da hat der Biber? auch voll daneben gedenkt, denn die freien Beits auf einer Bladde sind ja in jedem Unterordner annerst.Was macht ?
dir /b /o-d
Was sagt dir /?
/scheibenkleister
Hallo Cadiarn und willkommen im Forum!
Das könnte so gehen (mit Betonung auf "gehen"
):
Das Testen habe ich übrigens Dir überlassen - deswegen das "
Grüße
bastla
P.S.: Mit der passenden (lässt sich auch noch nachholen
) liest sich geposteter Code leichter ...
Das könnte so gehen (mit Betonung auf "gehen"
@echo off & setlocal
@set #=||(set #=1&start "%~dpnx0" /min cmd /c %0 %*&set #=&goto :eof)
if "%1"=="" (
start /WAIT /LOW /B cmd.exe /V /C %~s0 weiter_machen
goto:eof
)
:start
set LW=C:
FOR /F "tokens=3 delims= " %%i in ('dir %LW% /-c') do set Frei=%%i
if %frei% gtr 1000000000 goto vok
set "Ordner=D:\db"
set "AltDat=999999999999" & set "Alt="
for /f "delims=" %%i in ('dir /s /b /a-d "%Ordner%"') do for /f "tokens=1-5 delims=.: " %%a in ("%%~ti") do call :ProcessFile "%%c%%b%%a%%d%%e" "%%i"
if defined Alt echo del "%Alt%" /s /q
:vok
sleep 60
goto start
:ProcessFile
if %1 geq "%AltDat%" goto :eof
set "AltDat=%~1"
set "Alt=%~2"
goto :eof
echo
" vor dem "del
...Grüße
bastla
P.S.: Mit der passenden (lässt sich auch noch nachholen
Hallo Cadiarn!
ändern ...
Zum Löschen aller leeren Unterordner von %Ordner%:
Anmerkung: Durch die Sortierung werden die längeren Pfade (= Unterordner) vorweg behandelt - damit kann die Struktur "von unten nach oben" aufgerollt werden, und ein "
Grüße
bastla
schauen das nur jpg und index.html's gelöscht werden an Dateien.
Wenn beide gemeinsam einbezogen werden sollten (also die älteste Datei, die entweder vom Typ "jpg" ist oder "index.html" heißt), könntest Du versuchsweise die Zeile 15 auffor /f "delims=" %%i in ('dir /s /b /a-d "%Ordner%\*.jpg" "%Ordner%\index.html"') do for /f "tokens=1-5 delims=.: " %%a in ("%%~ti") do call :ProcessFile "%%c%%b%%a%%d%%e" "%%i"
Zum Löschen aller leeren Unterordner von %Ordner%:
for /f "delims=" %%i in ('dir /s /b /ad "%Ordner%"^|sort /r') do rd "%%i" 2>nul
rd
" ohne weitere Schalter entfernt nur leere Ordner. Das Unterdrücken der Fehlermeldung "Das Verzeichnis ist nicht leer.
" durch die Umleitung des Kanals 2 (STDERR) nach "nul
" ist dann nur noch Kosmetik ...Grüße
bastla