MS-DOS-Befehl zum Löschen aller Dateien außer einer


25

Gibt es einen MS-DOS-Befehl, mit dem ich alle Dateien bis auf eine löschen kann?

Betrachten Sie als Beispiel die folgenden Dateien:

a.001  
a.002  
a.003  
a.exe  
a.c  

Gibt es einen Befehl zum Löschen aller Dateien außer a.c?

Antworten:


36

Sie können die Befehle forund verwenden if, um dies zu erreichen:

for %i in (*) do if not "%~i" == a.c del "%~i"

Dies durchläuft das aktuelle Verzeichnis und vergleicht jeden Dateinamen mit ac. Wenn es nicht übereinstimmt, wird die Datei gelöscht.


+1 hätte nie gedacht, dies für ein einfaches Löschen zu verwenden ... Jede Menge guter Antworten hier!
William Hilsum

4
@Wil, wenn Sie anfangen, forregelmäßig zu verwenden, finden Sie alle möglichen verrückten Szenarien dafür. :)
Kevin

4
@Mike, Sie möchten "für% i in (A: \ Some \ Path \ *) tun, wenn nicht% ~ nxi == ac del% i" Beachten Sie, dass der Pfad mit * endet, um die Dateien in diesem Ordner abzurufen , und dass der Vergleich gegen% ~ nxi ist, den Namen ohne Pfad. Für destruktive for-Schleifen wie diese ist es eine gute Idee, "for ... do echo% i" zu verwenden, um zu ermitteln, welche Dateien betroffen sind, bevor der Befehl "for ... do if ... del% i" ausgeführt wird.
Kevin

1
Besser verwendendel "%i"
Mugen

1
Wenn für die IFAnweisung die Groß- und Kleinschreibung nicht berücksichtigt werden soll, ändern Sie sie in IF /I.
jep

16

Sie können die Datei so einstellen, dass sie nur gelesen werden kann, bevor Sie alles löschen

attrib +r a.c
del *.*
attrib -r a.c

10

Nein, das gibt es nicht. Ich würde ein Verzeichnis erstellen, die wichtige Datei in dieses kopieren und löschen . und verschieben Sie die Datei zurück. Löschen Sie dann die temporäre Datei.

mkdir temp
move a.c temp
erase *.*
move temp\* .
rmdir temp

1
+1 grob und technisch @Feiht Dieb sagt eine bessere Art und Weise, es zu tun (so gab es auch +1 dort), aber für die Geschwindigkeit ist dies die Art und Weise, wie ich es tun würde.
William Hilsum

3
FOR %f IN (*.*) DO IF NOT [%f]==[a.c] DEL /Q %f

1
Welchen Nutzen haben die []?
Barlop

1
@barlop: %fkönnte Leerzeichen im Dateinamen enthalten.
Paradroid

@paradroid nein, das wird nicht helfen, wenn [4 r] == [4 r] Echo gleich ist. anstatt []. Ich könnte raten, warum, aber ich würde es lieber von jemandem hören, der es tut.
Barlop

@barlop: Ich habe keine Ahnung, was Sie gerade dort eingegeben haben, aber die eckigen Klammern funktionieren genauso wie Anführungszeichen.
Paradroid

@paradroid C: \> Wenn [4 r] == [4 r] Echo abc <ENTER> ergibt, ist das Ergebnis "r] == [4 war zu diesem Zeitpunkt unerwartet." Wobei C: \> wenn "4 r" == "4 r" echo abc das Ergebnis abc ergibt. Was lässt Sie glauben, dass sie in irgendeiner Weise wie Anführungszeichen funktionieren würden? Sogar C: \> wenn [ab] == [ab] echo abc <- nicht funktioniert, wird ein ähnlicher Fehler ausgegeben. b] == [a war zu diesem Zeitpunkt unerwartet. Warum denken Sie, dass sie wie Anführungszeichen funktionieren?
Barlop

1
FOR /F "tokens=1-4" %%a in ('dir /a:-d /b /s %app_path%^|find /v "%file%"') DO Del /q %%a %%b %%c %%d

Ich denke, das wäre wahrscheinlich hilfreich, wenn erklärt würde, was es tut. Es sieht so aus, als würde es einen ganzen Ordnerbaum durchlaufen, was ich will. %app_path%und %file%sind die Wurzel des zu durchsuchenden Baums bzw. der zu löschenden Datei. Was ist das ^und warum übergeben wir vier Token pro Datei an den DelBefehl?
LarsH

0

Aus Geschwindigkeitsgründen benutze ich delen :

delen /! a.c

TCC / LE hat auch einen mächtigerendelBefehl:

del /[!a.c] *

del /[!a.c] *yeldsInvalid switch - "[!a.c]".
karlphillip

@karlphillip: Es funktioniert gut, "in TCC / LE" .
Paradroid

Aha! Ich habe diesen Kommentar noch nicht gesehen, danke Bruder.
Karlphillip
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.