Пакет: поиск ключевых слов в именах файлов с помощью цикла - PullRequest
1 голос
/ 30 апреля 2020

В настоящее время я работаю над небольшим сценарием, который должен искать определенные c ключевые слова в каталоге. Мой текущий код выглядит следующим образом:

dir /b /s *<keyword_1>* > results.txt
dir /b /s *<keyword_2>* >> results.txt
dir /b /s *<keyword_3>* >> results.txt
dir /b /s *<keyword_n>* >> results.txt

Чтобы не использовать ту же команду для n дополнительных ключевых слов, я хотел бы использовать вместо нее al oop. Поскольку я довольно новичок в пакетном скриптинге, я уже понял, что для %% f, вероятно, поможет мне в этом случае. Вероятно, будет выглядеть так:

for %%f in (*keyword_1* *keyword_2* *keyword_3* *keyword_n*) do (
dir /b /s *<keyword_xy>* >> results.txt
)

Мой вопрос сейчас заключается в том, как мне связать команду в l oop с соответствующими ключевыми словами? (сначала ключевое слово1, затем ключевое слово2 и так далее ...)? Может быть, есть и более простой способ выполнить работу. :)

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

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

for %%f in (*keyword_1* *keyword_2* *keyword_3* *keyword_n*) do (
dir /b /s %%f >> results.txt
)

Для получения дополнительной информации Link1 или Link2 .

0 голосов
/ 01 мая 2020

Нет абсолютно никакой необходимости в для этой задачи.

@Dir /B /S /A -D -S -L *keyword_1* *keyword_2* *keyword_3* *keyword_n* > results.txt

или при необходимости используйте двойные кавычки:

@Dir /B /S /A -D -S -L "*keyword_1*" "*keyword_2*" "*keyword_3*" "*keyword_n*" > "results.txt"

Я использовал дополнительные фильтры только для выбора файлов, в отличие от файлов и каталогов, а также для исключения файлов с системным атрибутом и теми, которые являются ссылками junctions / mount points / symboli c. Чтобы узнать больше об этих параметрах, откройте окно командной строки, введите dir /?, нажмите клавишу ENTER и прочитайте представленную информацию.


Учитывая предоставленный вами пример, , который, без сомнения, не отражает вашу реальную задачу , я полагаю, вы могли бы даже использовать:
@Dir /B /S /A -D -S -L "*keyword_*" > "results.txt"

Кстати, даже если вы намеревались использовать For l oop, вы все равно сведете его к минимуму:

@(For %%I In (1 2 3 n) Do @Dir /B /S /A -D -S -L "*keyword_%%I*") > "results.txt"

Если бы вы предоставили более реалистичный c пример ваших поисковых строк, мы могли бы предоставить более сфокусированное решение.

...