1

Вот содержимое каталога:

λ dir /b "..\src\"
main.c
main.c_
main.c2
main.cpp
main.cpp_
main.cpp2

Это работает как ожидалось:

λ dir /b "..\src\*.c"
main.c

Это не:

λ dir /b "..\src\*.cpp"
main.cpp
main.cpp_
main.cpp2

Почему этот шаблон совпадает с main.cpp_ и main.cpp2?

Что такое рабочее решение для перечисления только * .cpp файлов в каталоге?

РЕДАКТИРОВАТЬ: это не дубликат CMD есть ошибка подстановочный знак?

3 ответа3

1

Поскольку расширение имеет длину более 3 символов, и вы используете командный интерпретатор, который имеет много кода обратной совместимости для 16-битных приложений. Если бы вы запускали ту же команду в PowerShell, она бы работала так, как ожидалось.

Изменить, потому что я не могу отвечать на комментарии

Да, просто запустите powershell.exe, а затем выполните ту же команду, за исключением флага /b.

Редактировать 2

Насколько я знаю, нет, не было бы решения, если бы вы не хотели написать свою собственную программу dir . Что касается PowerShell, было бы неплохо начать знакомство с ним, так как я уверен, что Microsoft пытается убить устаревшего интерпретатора DOS.

1

Хотя это действительно немного странно, но работает как указано (выделено мной курсивом):

Вы можете использовать подстановочные знаки (* или?) Для представления одного или нескольких символов имени файла и для отображения подмножества файлов или подкаталогов.

Звездочка (*): используйте звездочку вместо любой строки символов, например:

dir * .txt перечисляет все файлы в текущем каталоге с расширениями, которые начинаются с .txt, например .txt, .txt1, .txt_old.

dir read * .txt перечисляет все файлы в текущем каталоге, которые начинаются с "read" и с расширениями, начинающимися с .txt, такими как .txt, .txt1 или .txt_old.

dir read *. * перечисляет все файлы в текущем каталоге, которые начинаются с "read" с любым расширением.

Подстановочный знак "звездочка" всегда использует сопоставление коротких имен файлов, поэтому вы можете получить неожиданные результаты .

-2

Я нашел решение без использования powershell:

λ dir /b "..\src\" | findstr /r /c:".*\.cpp$"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .