cmd.exe: "del * .txt" також видаляє * .txt1 тощо [дублікат]


8

Можливий дублікат:
команда WinXP dir: 3 та 4 розширення char однакові?

Мене вже давно дратує дивна поведінка cmd.exe (принаймні, WinXP та Windows7). Така команда del *.txtтакож видалить *.txt1файли ( буде виконано будь-яку кількість символів після '.txt'). Це добре відома помилка чи що?

Відповіді:


8

Це періодично зустрічаються дещо відомі?

Пояснення поведінки тут , доповнене можливою обробкою.

Короткий зміст: Це походить від того, як NTFS обробляє короткі (8.3) імена файлів, для сумісності зі старими речами, які не можуть обробити "новомодні" довгі імена файлів. dir /xможна використовувати для перегляду короткого імені файлу, наприклад:

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

Розширення довше трьох символів просто будуть усічені для їх короткого імені файлу; так .txt1, .txtxtxtxt, .txt_fileі т.д., все стали .txt.


6

Файли з розширенням більше 4 букв (та інші правила, звичайно, також застосовуються), отримують коротке ім'я, тому, наприклад, "foo.txt1" має коротке ім'я "foo ~ 1.txt". DEL(як DIRі, можливо, більшість інших cmd.exeвбудованих команд) також буде працювати над короткими іменами. Для обговорення пов'язаної теми дивіться тут: http://blogs.msdn.com/b/oldnewthing/archive/2005/07/20/440918.aspx


+1 для більш авторитетного посилання, ніж моє.
Джим Девіс

2

Це було б у файловій системі FAT / VFAT? Якщо так, то вас покусає хакер, який використовується для представлення імен, які не входять у схему 8.3; є DIRпараметр, який показує вам докоренені короткі імена, які починатимуться з власне імені файлу, але мають а ~та число перед розширенням, тоді розширення має максимум 3 символи. (Приклад: C:\Program Filesзазвичай перекладається на C:\PROGRA~1.) Підстановочна карта може несподівано відповідати цим іменам. Це не повинно відбуватися на NTFS або (я думаю) на мережевих акціях. окрім того, що DOS ще не вмер, здається ....


2

Можливо, ви можете використовувати Forfilesкоманду для вирішення проблеми

Напр.

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

Відповідає лише txtзакінченням.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.