madmad
Goto Top

Batch älteste Datei in Verzeichnis löschen

Ich suche eine Möglichkeit (Batch oder evtl. auch Konsolenprogramm) um die älteste Datei in einen Ordner zu löschen.
Bis jetzt bin ich nur auf sehr komplexe Lösungen gestoßen, aber es muss doch auch eine einfacher Lösung geben oder?

Vielen Dank

Content-ID: 105219

Url: https://administrator.de/forum/batch-aelteste-datei-in-verzeichnis-loeschen-105219.html

Ausgedruckt am: 23.12.2024 um 13:12 Uhr

bastla
bastla 05.01.2009 um 12:57:45 Uhr
Goto Top
Hallo madmad!

Etwa so:
@echo off & setlocal
set "Ordner=D:\Test"  
for /f "delims=" %%i in ('dir /b /a-d /o-d "%Ordner%"') do set "Alt=%Ordner%\%%i"  
echo del "%Alt%"  
Grüße
bastla
madmad
madmad 05.01.2009 um 13:11:26 Uhr
Goto Top
ah danke sowas in der art habe ich gesucht.
währe es auch Möglich den Script so zu machen das er alle Datein löscht auser die %anzahl& neusten?

Gruß
bastla
bastla 05.01.2009 um 13:43:24 Uhr
Goto Top
Hallo madmad!

Möglich wäre es - soll ich? face-wink
@echo off & setlocal
set "Ordner=D:\Test"  
set Anzahl=3

for /f "skip=%Anzahl% delims=" %%i in ('dir /b /a-d /o-d "%Ordner%"') do echo del "%Ordner%\%%i"  
Grüße
bastla
madmad
madmad 06.01.2009 um 10:23:41 Uhr
Goto Top
Hallo,

Super so habe ich mir das vorgestellt

Vielen Dank
darex89
darex89 30.01.2009 um 10:25:25 Uhr
Goto Top
Hallo alle miteinander,

Ich bräuchte auch so eine batch datei und da bin ich auf diesen Thread gestoßen. Habe es gleich ausprobiert aber bei mir funktioniert das iwie nicht. Den Ordner habe ich im Script gewechselt, muss ich noch etwas wechseln?

schonmal Vielen Dank im Voraus.

Gruß,
Darex
Biber
Biber 30.01.2009 um 11:20:34 Uhr
Goto Top
Moin Darex,

Habe es gleich ausprobiert aber bei mir funktioniert das iwie nicht.
Lässt sich dieses "iwie" noch iwie konkretisieren?

Kommt eine Fehlermeldung, fiept die Festplatte oder leuchtet eine gelbe LED?

Bitte gib am CMD-Prompt ein.
Type [Lw:\pfad\DateinameDeinesBätschelchens.cmd]
[Lw:\pfad\DateinameDeinesBätschelchens.cmd]
Ersetze dabei [Lw:\pfad\DateinameDeinesBätschelchens.cmd] durch den Dateinamen, den Du gewählt hast.
Poste das Ergebnis.

Danke
Biber
darex89
darex89 30.01.2009 um 11:35:43 Uhr
Goto Top
Also wenn ich die Batchdatei dann starte öffnet er ganz kurz das Fenster und schließt es sofort wieder. man sieht es kaum so schnell geht das. Aber er löscht die Datei nicht.

Wo soll ich das eingeben? Ich stehe gerade ein bißchen auf dem schlauch.
bastla
bastla 30.01.2009 um 12:05:19 Uhr
Goto Top
Hallo darex89!

Wo soll ich das eingeben?
Wenn
Bitte gib am CMD-Prompt ein.
nicht verständlich war: Eingabe direkt an der Kommandozeile (das, was Du über "Start / Ausführen /cmd" starten kannst und zum Testen von Batchen auch sollst) ...

Grüße
bastla
darex89
darex89 30.01.2009 um 12:45:33 Uhr
Goto Top
so sorry wenn ich etwas auf dem Schlauch gestanden habe.
Er gibt mir folgendes aus:

del "P:\test\P_daten_09-01-22_0200.xml"/o-d "P:\test"') do echo del "P:\test\%i"

hoffe ihr könnt mir da helfen.

Gruß
Darex
Biber
Biber 30.01.2009 um 18:07:55 Uhr
Goto Top
Moin darex89,

bezieht sich das "Er gibt mir folgendes aus:" auf meine Bitte
Type [Lw:\pfad\DateinameDeinesBätschelchens.cmd]
-oder auf -
[Lw:\pfad\DateinameDeinesBätschelchens.cmd]
???
Lass mich doch meine Anweisung zur Fehler-reproduktion diesmal eindeutiger formulieren:
  • Bitte gib am CMD-Prompt (drücke "Start"-"Ausführen", gib ein cmd und drücke ENTER)
  • gib ein Type [Lw:\pfad\DateinameDeinesBätschelchens.cmd] und drücke ENTER
  • gib ein [Lw:\pfad\DateinameDeinesBätschelchens.cmd] und drücke ENTER
  • Ersetze dabei [Lw:\pfad\DateinameDeinesBätschelchens.cmd] durch den Dateinamen, den Du gewählt hast.
  • Markiere die Bildschirmanzeige von oben links bis untern rechts mit optischen Zeigegerät und drücke ENTER
  • Poste das Ergebnis, in dem Du es als Textausgabe mit "Einfügen" oder "Strg-V" in einen weiteren Kommentar vervielfältigst.

Grüße
Biber
TaxMax
TaxMax 02.02.2009 um 08:07:17 Uhr
Goto Top
Ich hatte dasselbe Problem. Ich kenne mich mit der Art von Programmmierung nicht aus. Bei mir hat es funktioniert, als ich in beiden Vorschlägen das "echo " einfach gelöscht hatte. Laut Wikipedia dient Echo nur zum Anzeigen. Die vorstehenden Dateien zeigen nur an, welche Befehel kreirt wurden, fürhren Sie aber nicht aus. Kann an Win XP SP 3 PRO (mein Betriebssystem) liegen, weiß ich aber nicht. Also einfach Echo und Leerzeichen (davor oder danach) löschen und schon klappt es ganz wunderbar. Ich bin zufrieden.
bastla
bastla 02.02.2009 um 12:16:55 Uhr
Goto Top
@TaxMax
Kann an Win XP SP 3 PRO (mein Betriebssystem) liegen, weiß ich aber nicht.
Ich kann Dich beruhigen - es liegt nicht am Betriebssystem ...

... sondern: "it's not a bug, it's a feature" (und das sogar ernst gemeint face-wink) - das "echo" soll ein gefahrloses Testen ermöglichen, indem die Löschbefehle nur angezeigt, aber nicht ausgeführt werden (was ansonsten eigentlich immer dabei steht).

Wenn's dann vernünftig aussieht, so, wie Du es ohnehin gemacht hast: "echo" entfernen und den Dingen ihren Lauf lassen ... face-wink

Grüße
bastla
darex89
darex89 03.02.2009 um 08:23:14 Uhr
Goto Top
@Biber
sorry aber war am we nicht da. also ich habe das jetzt so gemacht wie du gesagt hattest und da gibt er mir folgendes:

P:\>Type P:\test\loeschung.cmd
@echo off & setlocal

set "Ordner=P:\test"

for /f "delims=" %%i in ('dir /b /a-d /o-d "%Ordner%"') do set "Alt=%Ordner%\%%i
"

del "%Alt%"/o-d "%Ordner%"') do echo del "%Ordner%\%%i"
P:\>P:\test\loeschung.cmd
Ungültige Option - "o-d".

P:\>

kannst du damit was anfangen?

@TaxMax + Bastla
Ich habe die beiden "echo"´s gelöscht aber iwie klappt es immer noch nicht, es passiert einfach nichts. DAs sieht jetzt so aus:

@echo off & setlocal

set "Ordner=P:\test"

for /f "delims=" %%i in ('dir /b /a-d /o-d "%Ordner%"') do set "Alt=%Ordner%\%%i"

del "%Alt%"/o-d "%Ordner%"') do del "%Ordner%\%%i"

Hoffe ihr könnt mir weiter hin helfen.
bastla
bastla 03.02.2009 um 08:50:18 Uhr
Goto Top
Hallo darex89!

Sollte eigentlich so aussehen:
@echo off & setlocal
set "Ordner=P:\test"  

for /f "delims=" %%i in ('dir /b /a-d /o-d "%Ordner%"') do set "Alt=%Ordner%\%%i"  
del "%Alt%"  
Grüße
bastla
darex89
darex89 03.02.2009 um 09:20:21 Uhr
Goto Top
Ah Super! Danke bastla.

Jetzt klappt es. danke schön euch allen!

Gruß Darex
TaxMax
TaxMax 03.02.2009 um 10:40:55 Uhr
Goto Top
@ Bastler

Ah, ja ein Feature. Mich hat es fast einen Tag gekostet. Da ich, wie gesagt, keine Ahnung habe, musste ich mich ganz langsam in die Problemlage einarbeiten. Gibt es noch mehr Standards, die keiner schreibt, die aber gewußt werden sollten, um zu vermeiden, dass das Rad ein weiteres Mal erfunden wird? Und gibt es vielleicht eine (für Ahnungslose geeignete) Zusammenstellung?

MadTax
bastla
bastla 03.02.2009 um 10:44:50 Uhr
Goto Top
Hallo TexMex!
@ Bastler

Ah, ja ein Feature. Mich hat es fast einen Tag gekostet.
Sorry - ich kann mich, abgesehen von diesem Beispiel hier - nicht daran erinnern, die Funktion eines derartigen "echo" bei von mir geposteten Batches nicht (zumindest im selben Thread) erklärt zu haben; insofern ein typischer Fall von Pech ...

Grüße
bastla
Klaus20
Klaus20 29.07.2011 um 19:26:40 Uhr
Goto Top
Habe versucht mir aus den diversen Beiträgen eine Löschbatch zu schreiben - bekomme nur leider den Hinweis: "Parameterformat nicht korrekt"
Kann mir jemand sagen wo ich den Fehler eingebaut habe ??

set "Ordner=C:\Test\Sicherungen\Tag\"
set "Ordner2=B:\Sicherungen\Tag\"
set Anzahl=10
for /f "skip=%Anzahl% delims=" %%i in ('dir /b /a-d /o-d "%Ordner%"') do del "%Ordner%\%%i" >>%log%

if exist B:\Sicherungen\Tag\ goto :stick

:stick
for /f "skip=%Anzahl% delims=" %%i in ('dir /b /a-d /o-d "%Ordner2%"') do del "%Ordner2%\%%i" >>%log%

Gruß Klaus
bastla
bastla 29.07.2011 um 19:45:38 Uhr
Goto Top
Hallo Klaus20!

Zum einen sehe ich nicht, dass %log% einen Wert erhielte, zum anderen gibt "del" ohnehin keine Daten aus, die in die Logdatei geschrieben werden könnten - allenfalls könntest Du eine zusätzliche Ausgabe erstellen:
for /f "skip=%Anzahl% delims=" %%i in ('dir /b /a-d /o-d "%Ordner%"') do (  
    del "%Ordner%\%%i"  
    echo %Ordner%\%%i
)>>%log% 
Außerdem ist es nicht sinnvoll, die Pfadangaben (in den ersten beiden Zeilen) mit einem "\" abzuschließen.

Schließlich: Die Prüfung auf "B:\Sicherungen\Tag" sollte eher so aussehen:
if not exist "%Ordner2%" goto :eof
Anstelle von "Batch-Ende" (:eof) kannst Du auch eine andere Sprungmarke angeben - in der derzeitigen Version ist es nämlich völlig egal, welches Ergebnis die Prüfung liefert, da auch ohne Sprung der Teil nach ":stick" ausgeführt wird.

Grüße
bastla

P.S. Bitte für das Posten von Batchschnipseln die passende verwenden ...
Klaus20
Klaus20 30.07.2011 um 09:18:13 Uhr
Goto Top
Hallo bastla,
vielen Dank für Deine Hilfe.
Habe momentan folgendes Phänomen.
Wenn ich loesch.bat im cmd Fenster laufen lasse bekomme ich keine Fehlermeldung.
Normalerweise lasse ich sie aber beim beenden eines 16bit Programmes (FoxPro) laufen und schon habe ich wieder die Fehlermeldung.
Alle anderen Sachen die in der Datei stehen werden einwandfrei ausgeführt
Prüfung ob Heute schon eine Sicherung erstellt wurde - Sicherung mit tzip - kopieren auf HDD und Stick - nur Löschen geht nicht.

Habe mir die Formatierungshilfe angesehen konnte Sie nur nicht umsetzen - gibt es eine Vorschau ??

Grüße Klaus
bastla
bastla 30.07.2011 um 10:25:23 Uhr
Goto Top
Hallo Kalus20!

Vorschau gibt es - leider - nicht (mehr), aber es genügt, Code oder andere Inhalte, die möglichst unverändert dargestellt werden sollen, zwischen "<code>"- und "</code>"-Tags zu setzen.

Editieren kannst Du übrigens, bis der Beitrag geschlossen ist.
Hinsichtlich des (nicht gemeldeten) Fehlers habe ich leider keine Idee ... face-sad

Grüße
bastla
Klaus20
Klaus20 02.08.2011 um 17:02:16 Uhr
Goto Top
Bekomme immer noch folgende Meldung:
->C:\Test\Sicherungen\Tag\ %i konnte nicht gefunden werden
Syntaxfehler
Vielleich hat ja doch noch einer eine Idee woran es liegen kann. Wofür steht den "%%i" ??

set "Ordner=C:\Test\Sicherungen\Tag"  
set Anzahl=10
for /f "skip=%Anzahl% delims=" %%i in ('dir /b /a-d /o-d "%Ordner%"') do (  
    del "%Ordner%\%%i"  
    echo %Ordner%\%%i
)>>%log% 

Grüße Klaus
bastla
bastla 02.08.2011 um 17:11:14 Uhr
Goto Top
Hallo Klaus20!
Wofür steht den "%%i" ??
In der Variablen %%i steht der Name jeder der gefundenen Dateien ...

Wenn Du kein "echo off" (und ggf am Ende zusätzlich eine Zeile mit "pause") verwendest, solltest Du ja den Ablauf der Schleife nachvollziehen können - wie sieht das denn da aus?

Grüße
bastla
Klaus20
Klaus20 02.08.2011 um 19:31:24 Uhr
Goto Top
Hallo bastla,
wieder mal vielen Dank für Deine Antwort.

Parameterformat nicht korrekt. - C:\Test\Sicherungen\Tag
C:\Test\Sicherungen\Tag\%i konnte nicht gefunden werden (obwohl ich im Testverzeichnis 15 Datein habe)

Grüße Klaus

P.S.: Entschuldigung für meine Fragen aber wie man sieht habe ich von "bätch" nicht so viel Ahnung.
bastla
bastla 02.08.2011 um 19:42:07 Uhr
Goto Top
Hallo Klaus20!

Wenn Du Dich (vor der Schleife einfügen) mit den folgenden Befehlen testweise langsam "vorarbeitest":
dir C:\Test
dir C:\Test\Sicherungen
dir C:\Test\Sicherungen\Tag
pause
kannst Du feststellen, ob etwas mit einem der Verzeichnisse nicht stimmt (darauf würde die Fehlermeldung hindeuten) und dieses zB (vorübergehend) umbenennen ...

Grüße
bastla
Klaus20
Klaus20 03.08.2011 um 10:44:00 Uhr
Goto Top
Hallo bastla,
egal was ich mache ich komme den Fehler nicht auf die Spur.
Habe folgendes herausgefunden:
1. Mit "Dir" wird alles korrekt angezeigt.
2. C:\Test\Sicherungen\Tag\%i konnte nicht gefunden werden ist nur bei C:\.. aber nicht beim Stick
3. Die Fehlermeldung "Parameterformat nicht korrekt" bekomme ich vom "Ordner" und vom "Ordner2"
4. Mit XP ist die Fehlermeldung auf Deutsch und unter Win7 ist sie auf Englisch.
5. Hast Du eine Ahnung ob die Befehle auch mit einer älteren Version (16bit) von Windows gehen ??
6. Ich rufe die bat Datei nähmlich aus einem 16bit Programm auf -
im cmd Fenster bekomme ich nur die Meldung von Punkt 2 ansonsten wird alles ausgeführt.

Hast Du eine Ahnung wie ich loesch.bat auf "alt" schreiben kann.

Grüße Klaus

P.S.: Mache es momentan mit DelAge32 %Ordner%\*.* 10 - es wurmt mich nur daß ich es mit Bordmitteln nicht hinbekomme.
bastla
bastla 03.08.2011 um 11:44:58 Uhr
Goto Top
Hallo Klaus20!

Mit 2., 3. und der Frage nach "loesch.bat" kann ich nicht wirklich etwas anfangen ... face-sad

Zu 6.
Versuch es mit dem Aufruf per
cmd /c C:\Batchdatei.bat
Grüße
bastla
Klaus20
Klaus20 03.08.2011 um 12:28:22 Uhr
Goto Top
Hallo bastla,

set "Ordner=C:\Test\Sicherungen\Tag"  
set "Ordner2=B:\Sicherungen\Tag"  
set Anzahl=10
for /f "skip=%Anzahl% delims=" %%i in ('dir /b /a-d /o-d "%Ordner%"') do (  
    del "%Ordner%\%%i"  
    echo %Ordner%\%%i
)>>%log% 

zu 2. die Meldung bekomme ich nach Aufruf von for /f ... aber nur mit %Orner% und nicht mit %Ordner%
zu 3. die Meldung bekomme zum Abschluß von for /f ... von beiden Ordnern
zu loesch.bat - ich meinte damit eine bat Datei mit Befehlen die auch mit älteren Windows gehen.
Ich glaube die Ausführung klappt nich da ich die batch Datei von einem 16 bit Programm aufrufe.

Mit cmd /c C:\Batchdatei.bat klappt leider auch nicht

Gruß Klaus
bastla
bastla 03.08.2011 um 13:30:02 Uhr
Goto Top
Hallo Klaus20!

Leider fällt mir jetzt wirklich nix Sinnvolles mehr ein face-sad - eröffne besser einen neuen Thread, sodass auch andere darauf aufmerksam werden und mitraten können ...

Grüße
bastla
Klaus20
Klaus20 03.08.2011 um 13:33:23 Uhr
Goto Top
Hallo bastla,

erst mal vielen Dank für Deine Mühe.

Grüße Klaus
Movecorn
Movecorn 22.08.2014 um 09:31:46 Uhr
Goto Top
Hallo Zusammen,

Der folgende Befehl Funktioniert einwandfrei!

@echo off & setlocal
set "Ordner=P:\test"
for /f "delims=" %%i in ('dir /b /a-d /o-d "%Ordner%"') do set "Alt=%Ordner%\%%i"
del "%Alt%"

Meine Frage ist:

Kann man in diese Schleife einen bestimmten Dateityp einbauen, sodass in einem Ornder nur z.B. .vmk Dateien gelöscht werden und .vbk Dateien außen vorgelassen werden.

Vielen Dank
Biber
Biber 22.08.2014 aktualisiert um 15:34:05 Uhr
Goto Top
Moin Movecom,

du kannst ja - was auch der Normalfall ist - beim DIR-Befehl eine Wildcard-Pattern wie zB "*.vmk" angeben.
Wenn ich es unter Beibehaltung des Stils erweitere in dem Schnipsel, dann:
echo off & setlocal
set "Ordner=P:\test"  
Set "endung=*.vmk"  
for /f "delims=" %%i in ('dir /b /a-d /o-d "%Ordner%\%endung%"') do set "Alt=%Ordner%\%%i"  

REM Alternative: die älteste Datei zum Löschen merken
REM aber nur, wenn mindestens 2 neuere vorhanden sind
REM for /f "skip=2 delims=" %%i in ('dir /b /a-d /o-d "%Ordner%\%endung%"') do set "Alt=%Ordner%\%%i"  

del "%Alt%"  

Ich habe noch eine kleine Erweiterung eingebaut - dein jetziger Schnipsel löscht zwar immer die älteste Datei (works as designed).
Allerdings würde er das auch tun, wenn die älteste Datei gleichzeitig die einzige ist - das wäre mir zu heiss bei einem unbeaufsichtigen Batch.

Grüße
Biber