Проход по файлам с расширением также принимает следующие буквы - PullRequest
0 голосов
/ 01 июня 2019

Например, вместо того, чтобы получать только файлы .mid, я получаю также файл .midi, и я хочу избежать этого:

enter image description here

Если возможно, я бы хотел избежать использования условия If в операторе DO.
Мне нужно использовать этот простой цикл for, потому что он не циклически повторяется во вложенных папках, и это поведение, которое я хочу.

Ответы [ 3 ]

2 голосов
/ 01 июня 2019
for /f %i in ( ' dir /b *.mid^|findstr /e /i /L /c:".mid" ' ) do @echo %i

не просто, но избегает оператора if. Простой dir отфильтрованный по findstr для поиска строк, которые /e оканчиваются /i без учета регистра, /L литерал /c: константной строкой.

«даже» не означает, что вы действительно хотите сканировать подкаталоги. Для этого добавьте переключатель /s к команде dir. Также может быть целесообразно добавить /on к команде dir для обслуживания файловых систем FAT.

2 голосов
/ 01 июня 2019

К сожалению, большинство команд обрабатывают *.ext как любое расширение, начинающееся с .ext, так что, как вы видели, оно также включает *.extn:

Таким образом, вы можете изменить эту первую строку в на:

FOR %i IN ('Dir /B/A-D *.mid^|FindStr /IEC:".mid"') DO @ECHO %~nxi

Или:

FOR %i IN ("*.mid") DO @IF /I "%~xi"  == ".mid" ECHO %~nxi

Вы также можете использовать команду, которая правильно обрабатывает расширение, where.exe:

For /F Delims^=^ EOL^= %A In ('Where .:*.mid 2^>Nul') Do @Echo %~nxA

Из пакетного файла вы удвоите % символов.

0 голосов
/ 02 июня 2019

Вот решение:

FOR /F "delims= eol=" %i IN ('WHERE .:*.mid 2^> NUL') DO @ECHO %~nxi

Для дополнительных файлов:

FOR /F "delims= eol=" %i IN ('WHERE .:*.mid .:*.midi 2^> NUL') DO @ECHO %~nxi

Или (эквивалентный синтаксис)

FOR /F "delims= eol=" %i IN ('WHERE "%CD%:*.mid" "%CD%:*.midi" 2^> NUL') DO @ECHO %~nxi

Для дополнительных файлов и пути:

FOR /F "delims= eol=" %i IN ('WHERE "%Path1%:*.exe" "%Path2%:*.dll" 2^> NUL') DO @ECHO %~nxi

% CD% или.означает «Текущий каталог», но:
% CD% вызывает ошибку для путей с пробелами, тогда в этом случае он должен быть заключен в двойные кавычки.
.также подходит для пути с пробелами.

В этих примерах поиск файлов в каталогах не является рекурсивным.

...