Подстановочные знаки в путях для пакетных скриптов - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть пакетный скрипт, содержащий строку, которая рекурсивно просматривает каталоги и копирует файлы, соответствующие указанному имени файла, в другой каталог:

FOR /R "J:\" %%G in (*FINAL.pdf) DO COPY "%%G" "C:\Users\user\discimport\" /Y

Отлично работает. Тем не менее, недавно на работе произошли изменения в соглашении об именах файлов, и теперь файлы больше не будут заканчиваться на "* FINAL.pdf". Теперь их нужно будет найти как "* Sign_Off * .pdf". Родительский каталог теперь будет заканчиваться символом подчеркивания даты, например так: «20180426_Final». Я попытался изменить строку в сценарии так, чтобы она выглядела логично для моих чувств, не связанных с Windows:

FOR /R "J:\*\*_Final" %%G in (*Sign_Off*.pdf) DO COPY "%%G" "C:\Users\user\discimport\" /Y

Но это не сработало. Я читал об этом и не могу найти прямой ответ, как отформатировать это с правильным синтаксисом. Похоже, подстановочные знаки могут быть использованы только в конце пути. Есть ли способ правильно отформатировать это с помощью пакетного скрипта или мне придется попробовать powershell?

1 Ответ

0 голосов
/ 26 апреля 2018

Робокопия - твой друг. Наберите help robocopy для получения списка всех его возможностей и объяснения следующей строки, которая должна заменить ваш цикл for:

for /f %%G in ('dir /B /A:D *_Final') do robocopy j:\ "%%G" *Sign_Off*.pdf /MT /S /ZB

Опция /A:D ограничивает список каталогов только каталогами, которые соответствуют шаблону, а /B ограничивает вывод простым списком. Вы обнаружите, что robocopy намного быстрее, чем цикл for, и проще в использовании.

...