Пакетное копирование файла из нескольких источников с помощью Robocopy

Я пытаюсь написать скрипт для копирования файлов журналов из разных источников и компьютеров в 1 место назначения с помощью robocopy.

for /f "tokens=*" %%a in (pc.txt) do (
set source0="\\%%a\D$\log"
set source1="\\%%a\C$\XX\log"
set source2="\\%%a\C$\XXX\log"
set dest="\\%COMPUTERNAME%\C$\XXX\logscript\%%a"
robocopy %source0% %dest% /create
robocopy %source1% %dest%
robocopy %source2% %dest%
)

Проблема, с которой я сталкиваюсь, заключается в том, что robocopy не получает переменные a при первом запуске, при 2-м запуске он работает, но когда я добавляю больше компьютеров в свой pc.txt, он использует только имена некоторых компьютеров.

1 ответ

Решение

Вам нужно использовать отложенное расширение:

SETLOCAL EnableDelayedExpansion

for /f "tokens=*" %%a in (pc.txt) do (
    set source0="\\%%a\D$\log"
    set source1="\\%%a\C$\XX\log"
    set source2="\\%%a\C$\XXX\log"
    set dest="\\%COMPUTERNAME%\C$\XXX\logscript\%%a"

    REM Note that variables are surrounded with exclamation marks instead.
    robocopy !source0! !dest! /create
    robocopy !source1! !dest!
    robocopy !source2! !dest!
)

ENDLOCAL

Без этого все содержимое FOR цикл анализируется только при первом проходе (поэтому ваши переменные source и dest еще не установлены). Когда отложенное расширение включено, переменные оцениваются на каждом проходе.

Другие вопросы по тегам