1

Есть ли подстановочный знак для цифры в командной строке?

Например,

dir *.1*

Перечислит все файлы, чьи расширения начинаются с 1.

2 ответа2

3

Ответ на ваш буквальный вопрос «нет», но если ваш реальный вопрос:

Могу ли я как-то выбрать только файлы, содержащие цифры в их имени под cmd?

тогда, если это что-то основанное на NT (точнее, на W2k plus), да, это можно сделать. Хитрость заключается в использовании findstr , который поддерживает простые регулярные выражения, чтобы отфильтровать результаты.
dir /b |findstr /r "\.[0-9]" даст вам результаты, подобные тем, что сделал бы dir в вашем примере. Это означает, что он также вернет file.1st.second (как и dir).
Небольшая проблема в том, что в нем будут перечислены только имена файлов, но даже это может быть решено:
for /f %F in ('dir /b ^|findstr /r "\.[0-9]"') do @echo %~ftzaF напечатает ваш список в хорошо отформатированном стиле dir . Обратите внимание, что он должен быть запущен в текущем каталоге!

ИЛИ (что я бы порекомендовал)
Если у вас есть powershell (или вы хотите установить его), запустите его и выполните exec:
gi .\* |? {$_.name -match "\.[0-9]"}

Отредактировано согласно комментарию OP:

Это будет перечислять файлы, используя for /r:
Самый простой, но очень медленный (практически непригодный для всего, кроме нескольких файлов), так как он запускает findstr для каждой строки:

for /r "c:\temp" %F in (*) do @echo %~nxF | findstr /r "\.[0-9]" && echo %F

Более сложный, но быстрый (использует специально подготовленные строки, чтобы разрешить передачу по одному экземпляру findstr:

for /f "tokens=2 delims=* eol=*" %F in ('^(for /r "directory_root" %F in ^(*^) do @echo %~nxF*%~dpnxF^) ^|findstr /r "\.[0-9].*\*"') do @echo %F 

или (функционально то же самое, но легче для чтения:>)

(for /r "directory_root" %F in (*) do @echo %~nxF*%~dpnxF) | for /f "tokens=2 delims=* eol=*" %F in ('findstr /r "\.[0-9].*\*"') do @echo %F

Все примеры запускаются прямо из командной строки

2

Нет, MS-DOS поддерживает только два подстановочных знака (на основе CP/M). Они "*", обозначая любую последовательность символов, и "?", указывая на один символ. В подстановочных знаках нет различий между алфавитами и цифрами, а также отсутствует поддержка регулярных выражений, ограничивающих подстановочные знаки цифрами.

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