Supportnet / Forum / BS-Sonstige
jede x-te Datei behalten Rest löschen
Frage
Hallo,
ich hoffe das es für euch kein Problem ist!
hier mein Problem/Wunsch:
Auf dem Verzeichnis befinden sich Dateien von z.B. <Datei1> bis <Datei123>
Nun möchte ich jede 3 oder 4 Datei (kann durch Parameter beim Aufruf der Batch-Datei gesteuert
werden) behalten und den Rest löschen.
Danke und Gruss,
Peter
Antwort 1 von Annndy
ähhmm...
also wenn ich dich richtig verstanden habe dann ist das das was du suchst:
@echo off
set andy=0
set haha=%1
set hahaa=%2
if not %haha%'==' goto xy
echo ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo ³------NIX!! Parammaedder nidde uebergebbe!------³
echo ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
goto exit
:xy
if %andy% GTR %haha2% goto exit
set /a andy=%andy%+%haha%
if not exist datei%andy%.aab goto exit
del datei%andy%.aab
echo Datei%andy%.aab Geloescht!
goto xy
:exit
pause
das ruft man dann z.B. so auf
blabla.bat [die jewileige datei die gelöscht werden soll( bei 3 wird datei3 datei6 datei9 datei12 usw gelöscht)] [bis zu welcher zahl]
wenn du also jede 3 datei bis zur datei 123 löschen wilst geht das so
hoi.bat 3 123
also wenn ich dich richtig verstanden habe dann ist das das was du suchst:
@echo off
set andy=0
set haha=%1
set hahaa=%2
if not %haha%'==' goto xy
echo ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo ³------NIX!! Parammaedder nidde uebergebbe!------³
echo ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
goto exit
:xy
if %andy% GTR %haha2% goto exit
set /a andy=%andy%+%haha%
if not exist datei%andy%.aab goto exit
del datei%andy%.aab
echo Datei%andy%.aab Geloescht!
goto xy
:exit
pause
das ruft man dann z.B. so auf
blabla.bat [die jewileige datei die gelöscht werden soll( bei 3 wird datei3 datei6 datei9 datei12 usw gelöscht)] [bis zu welcher zahl]
wenn du also jede 3 datei bis zur datei 123 löschen wilst geht das so
hoi.bat 3 123
Antwort 2 von ppeter
Danke Annndy,
ich habe gedacht das es mit dem Befehl
dir /B /o-d d3* > dir.txt
alle dateien die mit d3* beginnen id die dir.txt schreibe und jetzt aus der Datei zeilenweise lese und lösche bzw. nicht lösche.
die erste Datei behalte!
danach 3-Dateien lösche
die nächste überspringen
und weiter mit löschen
die letzte datei nicht löschen!
es sieht dan so aus:
d3plog01, d3plog04, d3plog07, ... letzte Datei
Danke für die Tipps!
ich habe gedacht das es mit dem Befehl
dir /B /o-d d3* > dir.txt
alle dateien die mit d3* beginnen id die dir.txt schreibe und jetzt aus der Datei zeilenweise lese und lösche bzw. nicht lösche.
die erste Datei behalte!
danach 3-Dateien lösche
die nächste überspringen
und weiter mit löschen
die letzte datei nicht löschen!
es sieht dan so aus:
d3plog01, d3plog04, d3plog07, ... letzte Datei
Danke für die Tipps!
Antwort 3 von Annndy
achso...
hab das dort irgendwie falsch verstanden...
werd mich gleich mal damit befassen..
hab das dort irgendwie falsch verstanden...
werd mich gleich mal damit befassen..
Antwort 4 von manei
Hallo,
wenn du die erste, die vierte, die siebente usw. bis hin zur letzten behalten willst, werden nur 2 Dateien dazwischen gelöscht.
Der dir-Befehl wird benötigt, um die Gesamtanzahl der Dateien zu ermitteln, zum verarbeiten aber nicht brauchbar, da die Dateien direkt innerhalb einer Doppelschleife angesprochen werden müssen. Hier das Ergebnis:
@echo off
cls
set /a x=0
for /f %%e in ('dir /B /o-d d3*') do set /a x+=1 & echo %%e>nul
set /a x-=1
set /a x1=0
:st1
set /a x1+=1
set y=0
:st12
if %x1% gtr %x% goto st2
set /a x1+=1
if %x1%geq 10 goto st11
del d3plog0%x1%.???
goto st111
:st11
del d3plog%x1%.???
:st111
set /a y+=1
if %y%==2 goto st1
goto st12
:st2
echo alle Dateien gelöscht
pause
:end
cls
Du kannst das mal testen, indem Du vor die del-Zeilen ein rem setzt und darunter 2 Ziel setzt wie:
rem del d3plog0%x1%.???
echo 0%x1%
pause
und das nächste del genauso.
Willst du dazwischen 3 Dateien löschen, mußt du nur in der Zeile "if %y%==2 goto st1" die 2 in 3 abändern.
Da nur bis zur vorletzten Datei verarbeitet wird, bleibt die letzte Datei auf jeden Fall immer erhalten.
MfG maneich
wenn du die erste, die vierte, die siebente usw. bis hin zur letzten behalten willst, werden nur 2 Dateien dazwischen gelöscht.
Der dir-Befehl wird benötigt, um die Gesamtanzahl der Dateien zu ermitteln, zum verarbeiten aber nicht brauchbar, da die Dateien direkt innerhalb einer Doppelschleife angesprochen werden müssen. Hier das Ergebnis:
@echo off
cls
set /a x=0
for /f %%e in ('dir /B /o-d d3*') do set /a x+=1 & echo %%e>nul
set /a x-=1
set /a x1=0
:st1
set /a x1+=1
set y=0
:st12
if %x1% gtr %x% goto st2
set /a x1+=1
if %x1%geq 10 goto st11
del d3plog0%x1%.???
goto st111
:st11
del d3plog%x1%.???
:st111
set /a y+=1
if %y%==2 goto st1
goto st12
:st2
echo alle Dateien gelöscht
pause
:end
cls
Du kannst das mal testen, indem Du vor die del-Zeilen ein rem setzt und darunter 2 Ziel setzt wie:
rem del d3plog0%x1%.???
echo 0%x1%
pause
und das nächste del genauso.
Willst du dazwischen 3 Dateien löschen, mußt du nur in der Zeile "if %y%==2 goto st1" die 2 in 3 abändern.
Da nur bis zur vorletzten Datei verarbeitet wird, bleibt die letzte Datei auf jeden Fall immer erhalten.
MfG maneich