BatchScript zum Aufräumen

epytir

Newbie
Registriert
Juni 2014
Beiträge
7
Hallo Community,
ich habe ein Script geschrieben :
Es soll Dateien löschen die älter als x sind und danach alle Dateien kopieren solange der Festplattenplatz reicht oder alles kopiert ist.
Das löschen von Dateien älter als x läuft super und ich führe das script in einer 64 bit Powershell aus damit die variable für die Festplatte auch groß genug werden darf .
Leider führt das script zu einer Endlossschleife und es wird nichts kopiert
Hier das Script kann mir irgendjemand sagen wo mein Fehler liegt :

Code:
echo=on
SETLOCAL ENABLEDELAYEDEXPANSION
set pruefung="Prüfpfad"

forfiles /p "%pruefung%"  /m *.* /c "cmd /c Del @path" /d -20 
 
:Schleifewiederholen
copy %pruefung%\*.* NUL
if errorlevel 1 goto AlleDatenKopiert


FOR /F %%F IN ('DIR /B /A-D /O-D /TW %pruefung%\*') DO (SET AKTJOB=%%F)
for %%F in (%pruefung%\%AKTJOB%) do set groesse=%%~zF
for /f "tokens=3" %%i in ('dir c: /-c') do set Festplattenplatz=%%i   
if %Festplattenplatz% GTR %groesse% goto Dateipasst
if %Festplattenplatz% LSS %groesse% goto Plattevoll
goto AlleDatenKopiert
:Dateipasst

move "zu pfad wo dateien hin sollen"
echo %AKTJOB%
goto Schleifewiederholen
) 
)

:Plattevoll
echo Platte voll

:AlleDatenKopiert
echo Fertig

pause

Gruß Epytir
 
Ähm, blöd gefragt, aber hast du das Script mal so weit gebaut, dass es auch was tut?
Weil im Moment ist klar dass es in einen endlos schleife springt, wenn der plattenplatz nie kleiner wird.

wenn er durch die ermittlung für die dateigröße und den plattenplatz durch ist machst du die abfrage ob plattenplatz > datei. dann springst du zu datei passt, hast hier ein nicht funktionierendes move, gibts den dateinamen aus und schmeißt die schleife wieder von vorne an.

ich würde mit einem CALL statt einem GOTO arbeiten.
dann kannst du aus der schleife rausspringen, die datei wegschieben und dann springst du wieder zurück in die schleife.

Code:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set pruefung="."

forfiles /p "%pruefung%"  /m *.* /c "cmd /c Del @path" /d -20
 
:Schleife
copy %pruefung%\*.* NUL > NUL
if errorlevel 1 goto AlleDatenKopiert
 
FOR /F %%F IN ('DIR /B /A-D /O-D /TW %pruefung%\*') DO (
	set AKTJOB=%%F
	for %%F in (%pruefung%\!AKTJOB!) do set groesse=%%~zF
	for /f "tokens=3" %%i in ('dir c: /-c') do set Festplattenplatz=%%i
	if !Festplattenplatz! GTR !groesse! (CALL :Dateipasst)
	if !Festplattenplatz! LSS !groesse! (CALL :Plattevoll)
)

:AlleDatenKopiert
echo. & echo == Fertig ==
pause > NUL
goto end

:Dateipasst
:: move "zu pfad wo dateien hin sollen"
echo %AKTJOB%
goto end
 
:Plattevoll
echo Platte voll
goto end
 
:END
 
Danke euch manchmal sieht man denn Wald vor lauter Bäumen nicht ausgerechnet den move Fehler übersehen -,-
Das mit dem Call ist eine gute Idee habe noch nie mit Calls gearbeitet funktioniert aber super .

Vielen dank dir
Gruß Epytir
 
Zurück
Oben