Пакетное копирование: копирование файлов, если выполняются условия включения и исключения - PullRequest
2 голосов
/ 05 октября 2011

Мое требование - написать пакетный скрипт, который будет сравнивать файлы в двух папках. Если файл существует как в SourceFolder, так и в TargetFolder, перезапишите файл в TargetFolder файлом в SourceFolder.

Используя оператор for и оператор if, я могу добиться этого:

for /R %Source% %%G in (Prefix.*.ext) do (
    if exist %Target%%%~nxG (
        del %%G
        copy %Target%%%~nxG %Source% 
    ) 
)

Хотя дополнительным требованием является копирование только тех файлов, которые начинаются с префикса. и заканчиваться на «.ext», а также исключать все файлы, содержащие слово «exclude».

На английском языке: Скопировать все файлы из этой исходной папки, которые начинаются с «Префикс», заканчиваются на «.ext», не содержат текст «исключить». и уже существует в целевой папке.

Это то место, где я застреваю. Кто-нибудь знает, как сделать это в пакетном режиме?

Ответы [ 2 ]

5 голосов
/ 05 октября 2011

Вы можете использовать xcopy для этого.Во-первых, я предполагаю, что Prefix и ext являются фактическими строками, чтобы использовать переменные, вместо этого вам нужно будет обернуть их как %Prefix%.

Во-вторых, вам нужно будет создать новый текстовый файл.Назовите его excludes.txt и поместите в тот же каталог, что и ваш командный файл.(Если вы не хотите создавать пакетный файл, просто поместите его в каталог, который активен при запуске команды).Единственным содержимым этого файла должна быть ваша строка EXCLUDE без кавычек или другая разметка.

Хорошо, сама команда:

xcopy %Source%\Prefix.*.ext %Target% /U /EXCLUDE:excludes.txt

Чтобы разбить ее:

  1. %Source%\Prefix.*.ext Выбирает файлы в исходной папке, которые начинаются с префикса и заканчиваются на .ext
  2. %Target% Указывает место назначения для файлов
  3. /U Только копировать файлыкоторые уже существуют в целевом каталоге
  4. /EXCLUDE:excludes.txt Это будет считано в excludes.txt и исключит любой файл, который соответствует любой части excludes.txt файла.

Вот и все!Вероятно, это проще, чем написать оператор FOR с вложенным IF.

0 голосов
/ 06 октября 2011

Прочитав этот ТАК вопрос , я закончил тем, что делал это так.(До ответа на вопрос)

pushd %Target%
attrib +h *Exclude
for /R %%G in (Prefix.*.ext) do (
    if exist %Target%%%~nxG (
        del %%G
        copy %Target%%%~nxG 
    ) 
)
attrib -h *Exclude
popd

Решение xcopy, вероятно, выглядит лучше, хотя я бы предпочел не создавать (и удалять) файлы, если смогу помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...