У меня есть следующий сценарий пакетной обработки Windows для просмотра всех файлов в текущем каталоге:

FOR %%F in (%CD%\*.*) DO (
    :: I am doing my process here
)

Я знаю, что могу перебрать определенный тип файла с помощью *.ext, но мне нужно перебрать все указанные ниже типы файлов и игнорировать все другие типы, которые также находятся только в одном цикле FOR:

php
phtml
css
js
sql
xml

Как я могу добиться этого, внеся в свой код малейшие изменения?

Я не особо разбираюсь в пакетных сценариях, поэтому будет очень благодарна за любую помощь.

4
VST 26 Июл 2017 в 08:39

1 ответ

Лучший ответ

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

for %%I in (*.php *.phtml *.css *.js *.sql *.xml) do echo "%%I"

Или, возможно, лучше, в зависимости от того, что вы хотите сделать:

for /F "delims=" %%I in ('dir /A-D /B *.php *.phtml *.css *.js *.sql *.xml 2^>nul') do echo "%%I"

Версия с DIR работает также для файлов со скрытым атрибутом и лучше, когда файлы в текущем каталоге переименовываются, перемещаются или удаляются, то есть список файлов текущего каталога изменяется из-за команд в теле < Strong> FOR , поскольку список файлов, обрабатываемых FOR , не изменяется после выполнения команды DIR , чего не происходит при использовании первого решения. Первое решение может легко привести к неожиданному поведению, например к двойной обработке файла, пропуску неожиданных файлов или бесконечному циклу выполнения, когда файлы переименовываются, перемещаются, изменяются или удаляются в текущем каталоге.

Запустите в окне командной строки for /? и dir /? для получения справки по этим двум командам, которые поддерживают указание нескольких шаблонов подстановочных знаков в списке аргументов.

1
Mofi 26 Июл 2017 в 09:14
Примечание. Используя for /f и текстовый файл в качестве аргумента, вы можете создать строку, представляющую типы файлов во время выполнения, и не нужно их жестко кодировать.
 – 
geisterfurz007
26 Июл 2017 в 09:53