cmd.exe: „del * .txt” usuwa również * .txt1 itp. [duplikat]

8

Możliwe zduplikowanie:
polecenie WinXP dir: rozszerzenia 3 i 4 znaków są takie same?

Przez długi czas denerwowało mnie dziwne zachowanie cmd.exe (przynajmniej WinXP i Windows7). Polecenie podobne del *.txtusunie także *.txt1pliki ( zrobi to dowolna liczba znaków po '.txt'). Czy to dobrze znany błąd?

Społeczność
źródło

Odpowiedzi:

8

To czasami spotykane, nieco znane?

Wyjaśnienie zachowania jest tutaj , wraz z możliwym obejściem problemu.

Podsumowanie: Pochodzi ze sposobu, w jaki NTFS obsługuje krótkie (8.3) nazwy plików, w celu zapewnienia zgodności ze starszymi rzeczami, które nie obsługują długich nazw plików „o nowym wymiarze”. dir /xmożna użyć do wyświetlenia krótkiej nazwy pliku, tak jak:

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
 ...

Rozszerzenia dłuższe niż trzy znaki zostaną po prostu obcięte dla krótkiej nazwy pliku; tak .txt1, .txtxtxtxt, .txt_file, etc, wszystko stać .txt.

Jim Davis
źródło
6

Pliki z rozszerzeniem zawierającym więcej niż 4 litery (i mają zastosowanie również inne reguły), otrzymują krótką nazwę, więc na przykład „foo.txt1” ma krótką nazwę „foo ~ 1.txt”. DEL(podobnie jak DIRi prawdopodobnie większość innych cmd.exewbudowanych poleceń) również będzie działać na krótkich nazwach. Dyskusję na pokrewny temat można znaleźć tutaj: http://blogs.msdn.com/b/oldnewthing/archive/2005/07/20/440918.aspx

Christian.K
źródło
+1 za link bardziej autorytatywny niż mój.
Jim Davis
2

Czy byłby to system plików FAT / VFAT? Jeśli tak, zostajesz ugryziony przez hakery używane do reprezentowania nazw, które nie pasują do schematu 8.3; dostępna jest DIRopcja, która pokazuje zniekształcone krótkie nazwy, które zaczynają się od rzeczywistej nazwy pliku, ale ~przed rozszerzeniem mają znaki i, a następnie rozszerzenie jest ograniczone do 3 znaków. (Przykład: C:\Program Fileszwykle oznacza C:\PROGRA~1.) Symbol wieloznaczny może nieoczekiwanie pasować do tych nazw. To nie powinno się zdarzyć na NTFS lub (tak myślę) na udziałach sieciowych. poza tym, że DOS wciąż nie umarł, wydaje się ...

geekozaur
źródło
2

Prawdopodobnie możesz użyć Forfilespolecenia do obejścia tego problemu

Na przykład.

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

Dopasowuje tylko txtzakończenia.

phuclv
źródło