Пакетное копирование файла из нескольких источников с помощью 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 еще не установлены). Когда отложенное расширение включено, переменные оцениваются на каждом проходе.