cmd.exe: “del * .txt” entfernt auch * .txt1 etc [duplicate]

8

Mögliches Duplikat:
WinXP-Verzeichnisbefehl: 3 und 4 Zeichenerweiterungen sind gleich?

Ich habe mich lange über ein seltsames Verhalten von cmd.exe geärgert (zumindest WinXP und Windows7). Ein Befehl wie entfernt del *.txtauch *.txt1Dateien (eine beliebige Anzahl von Zeichen nach '.txt' reicht aus). Ist das ein bekannter Bug oder was?

Gemeinschaft
quelle

Antworten:

8

Es ist eine gelegentlich angetroffene etwas bekannte?

Hier finden Sie eine Erklärung des Verhaltens sowie eine mögliche Problemumgehung.

Zusammenfassung: Es kommt von der Art und Weise, wie NTFS mit kurzen (8.3) Dateinamen umgeht, um die Kompatibilität mit älteren Dingen zu gewährleisten, die keine langen Dateinamen mit "neuem Fang" verarbeiten können. dir /xkann verwendet werden, um den kurzen Dateinamen wie folgt anzuzeigen:

C:\>dir /x *~*
 ...
02/25/2011  08:18 AM    <DIR>          DOCUME~1     Documents and Settings
05/28/2011  12:02 AM    <DIR>          PROGRA~1     Program Files
 ...

Erweiterungen, die länger als drei Zeichen sind, werden aufgrund ihres kurzen Dateinamens einfach abgeschnitten. so .txt1, .txtxtxtxt, .txt_file, usw., alle werden .txt.

Jim Davis
quelle
6

Dateien mit mehr als 4 Buchstaben in der Endung (und natürlich auch anderen Regeln) erhalten einen Kurznamen, so hat beispielsweise "foo.txt1" den Kurznamen "foo ~ 1.txt". DEL(Wie DIRund möglicherweise die meisten anderen cmd.exeeingebauten Befehle) werden auch Kurznamen verarbeitet. Eine Diskussion zu einem verwandten Thema finden Sie hier: http://blogs.msdn.com/b/oldnewthing/archive/2005/07/20/440918.aspx

Christian.K
quelle
+1 für einen verbindlicheren Link als meinen.
Jim Davis
2

Wäre dies auf einem FAT / VFAT-Dateisystem? Wenn ja, werden Sie von der Hackerei gebissen, mit der Namen dargestellt werden, die nicht in das 8.3-Schema passen. Es gibt eine DIROption, die Ihnen die verstümmelten Kurznamen anzeigt, die mit dem tatsächlichen Dateinamen beginnen, aber ein ~und eine Nummer vor der Erweiterung haben. Die Erweiterung ist dann auf 3 Zeichen begrenzt. (Beispiel: Wird C:\Program Filesnormalerweise in übersetzt C:\PROGRA~1.) Ein Platzhalter stimmt möglicherweise unerwartet mit diesen Namen überein. Dies sollte nicht auf NTFS oder (glaube ich) auf Netzwerkfreigaben passieren. außer dass DOS immer noch nicht gestorben ist, so scheint es ....

Geekosaurier
quelle
2

Sie können den ForfilesBefehl wahrscheinlich für eine Problemumgehung verwenden

Z.B.

Forfiles  -s -m *.txt -c "cmd /C del /q @path"

Stimmt nur mit txtEndungen überein.

phuclv
quelle