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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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
32 Kommentare
Neuester Kommentar
Moin Darex,
Kommt eine Fehlermeldung, fiept die Festplatte oder leuchtet eine gelbe LED?
Bitte gib am CMD-Prompt ein.
Ersetze dabei [Lw:\pfad\DateinameDeinesBätschelchens.cmd] durch den Dateinamen, den Du gewählt hast.
Poste das Ergebnis.
Danke
Biber
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]
Poste das Ergebnis.
Danke
Biber
Moin darex89,
bezieht sich das "Er gibt mir folgendes aus:" auf meine Bitte
Lass mich doch meine Anweisung zur Fehler-reproduktion diesmal eindeutiger formulieren:
Grüße
Biber
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
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.
@TaxMax
... sondern: "it's not a bug, it's a feature" (und das sogar ernst gemeint ) - 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 ...
Grüße
bastla
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 ) - 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 ...
Grüße
bastla
@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.
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.
@ 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
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
Hallo TexMex!
Grüße
bastla
@ 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 ...Ah, ja ein Feature. Mich hat es fast einen Tag gekostet.
Grüße
bastla
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
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
Hallo Klaus20!
Zum einen sehe ich nicht, dass %log% einen Wert erhielte, zum anderen gibt "
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:
Anstelle von "Batch-Ende" (
Grüße
bastla
P.S. Bitte für das Posten von Batchschnipseln die passende verwenden ...
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%
Schließlich: Die Prüfung auf "B:\Sicherungen\Tag" sollte eher so aussehen:
if not exist "%Ordner2%" goto :eof
: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 ...
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
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
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 ...
Grüße
bastla
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 ...
Grüße
bastla
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" ??
Grüße Klaus
->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
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.
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.
Hallo Klaus20!
Wenn Du Dich (vor der Schleife einfügen) mit den folgenden Befehlen testweise langsam "vorarbeitest":
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
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
Grüße
bastla
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.
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.
Hallo bastla,
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
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
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
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
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:
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
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