Поиск в каталоге в командной строке Windows показывает неверный вывод

2052
siliconpi

Я искал следующее, и он дал мне точный вывод (имена папок изменились)

C:\temp>dir *950*.pdf /s Volume in drive C has no label. Volume Serial Number is ABCDE  Directory of C:\temp\e\h\d\20100809  08/08/2010 10:54 PM 1,632,434 09_08_2010_004.pdf 08/08/2010 10:54 PM 1,368,895 09_08_2010_003.pdf 08/08/2010 10:54 PM 2,111,360 09_08_2010_005.pdf 3 File(s) 5,112,689 bytes 

Я не понимаю, почему " 950 " сопоставляется с этими 3 файлами ...!

Edit1

Я на самом деле переместил его в c: \ temp \ на этот раз, и он соответствует одному из них!

 C:\temp\20100809>dir *950*.pdf Volume in drive C has no label. Volume Serial Number is ABCDE  Directory of C:\temp\20100809  08/08/2010 10:54 PM 2,111,360 09_08_2010_005.pdf 

Edit2

@ Гравитация ответ на точку!

C:\temp\20100809>dir *950*.pdf /x Volume in drive C has no label. Volume Serial Number is ABCDE  Directory of C:\temp\20100809  08/08/2010 10:54 PM 2,111,360 09507E~1.PDF 09_08_2010_005.pdf 
2
Можете ли вы воспроизвести это в другой структуре каталогов? Dennis Williamson 13 лет назад 0
@ Денис - пожалуйста, смотрите Edit1 siliconpi 13 лет назад 0

2 ответа на вопрос

8
grawity
dir /x 

Из соображений совместимости Windows генерирует имя 8.3 для каждого созданного длинного имени файла, а код сопоставления с подстановочными знаками ( FindFirstFile()) проверяет как исходные, так и сокращенные имена. Используйте, dir /xчтобы увидеть, какие короткие имена присваиваются каждому файлу.

Обычно короткие имена автоматически генерируемый выглядеть 090820~1.PDFи 090820~2.PDFтак далее, но есть исключения :

[...] если по крайней мере 4 файла или папки уже существуют с одинаковыми начальными 6 символами в их коротких именах, выделенный LFN вместо этого усекается до первых 2 букв базового имени (или 1, если базовое имя имеет только 1 букву) сопровождаемый 4 шестнадцатеричными цифрами, полученными из недокументированного хэша имени файла, сопровождаемого [...]

Перемещение файла в пределах одного раздела не изменяет ни одно из его имен, а только перемещает их.


При использовании файловой системы NTFS создание имени 8.3 можно отключить в масштабе всей системы, используя:

fsutil behavior set disable8dot3 

Однако это не повлияет на существующие имена.

+1 Блестящий ответ! (возможно, не такая блестящая реализация) Dennis Williamson 13 лет назад 1
0
user48918

У меня есть эта проблема, и я испытал желание использовать fsutil для отключения коротких имен в масштабе всей системы, но решил отказаться от нее. Вместо этого я обнаружил, что вы можете использовать fsutil.exe, чтобы связать файл с более коротким именем, как в:

fsutil.exe file setshortname 175002886.pdf ~1752886.pdf

Вам нужно будет сделать это как администратор.