Один символ подстановки Windows возвращает больше, чем ожидалось

3

Я пытаюсь сделать список каталогов файлов с именами файлов, состоящими из 8 символов, за которыми следует точка и расширение файла в командной оболочке Windows. Шаблон подстановки, который я использую, - «????????. TIF». Это возвращает ВСЕ имена файлов с расширением «.TIF», независимо от длины части имени файла перед расширением. Пример:

dir A * .TIF

Возвращает ABCDEFGH.TIF и ABCDEFGHIJ.TIF

dir ????????. TIF

Также возвращает оба файла. Я ожидаю, что будет возвращен только первый из них, поскольку он является единственным из двух, которые соответствуют шаблону (8 одиночных символов, за которыми следует «.TIF».) Чем объясняется такое поведение?

Заранее спасибо за любые ответы.

E Brown
источник

Ответы:

7

Я думаю, проблема в том, что ABCDEFGHIJ.TIF имеет короткое имя что-то вроде ABCDEF~1.TIF и это соответствует вашему образцу.

Если вы используете DIR /X вы увидите короткие имена - т.е. имя файла 8.3 - из всех ваших файлов.

Вы можете попробовать что-то вроде этого:

DIR /B | FINDSTR /R /I "^........\.TIF"

Это использует FINDSTR в режиме регулярного выражения, чтобы обеспечить ровно 8 символов перед .TIF, Для получения дополнительной помощи по FINDSTR введите FINDSTR /? в командной строке.

Dave Webb
источник
Спасибо за ответ. Использование «DIR / X» отображает короткое имя файла в его выводе в дополнение к более длинному имени. Есть ли способ отфильтровать короткие имена файлов с помощью команды DIR? Я не вижу ничего перспективного в опциях с «DIR /?».
E Brown
Я не знаю, как заставить DIR соответствовать только длинным именам, поэтому я предложил использовать FINDSTR фильтровать вывод DIR вместо.
Dave Webb
Благодарю. Я собирался установить GNU Unix Utils и выполнить подобную фильтрацию с помощью "grep". Не знал о команде "findstr", но ваш метод работал нормально для того, что мне нужно было сделать.
E Brown
2

Если вы хотите исправить это, откройте командную строку с повышенными правами и введите:

fsutil 8dot3name set 1

Существующие файлы будут по-прежнему иметь проблему, пока вы не удалите короткое имя файла. Новые файлы, которые вы копируете / создаете, не будут иметь проблемы. Если вам нужно массово вырезать короткие имена файлов, вы можете использовать:

fsutil 8dot3name strip /s <directory>

Похоже, проблема связана с Windows 7, использующей короткое имя файла для подстановочных знаков вместо длинного имени файла.

Brain2000
источник
0

? значит соответствует любому не замужем персонаж. Делая dir ????????.TIF Вы говорите, верните любые файлы, которые имеют 8 символов и .tif расширение, в то время как dir A*.tif означает вернуть любые файлы, которые начинаются с A или «а» и иметь .tif как продолжение

Sathyajith Bhat
источник
Спасибо за ответ. Я знаю это - я включил «dir A * .TIF», чтобы показать два файла в целях иллюстрации. Мне нужно перечислить только файлы с 8 символами и расширением .tif. Шаблон TIF ????????. TIF возвращает имя файла из 8 символов и файла .TIF и имя файла из 10 символов и файла .TIF. Я ожидаю, что он вернет только первое, так как шаблон определяет 8 одиночных символов и расширение .tif.
E Brown