@echo off
setlocal enabledelayedexpansion
set "server_list=serverlist.config"
rem Set variables with leading underscores from the server list i.e. _SERVER_LIST=...
set "continuation="
for /f "tokens=*" %%A in (!server_list!) do @(
set "line=%%~A"
if "!line:~-1!" == "\" (
set "continuation=y"
if defined last_line (
set "line=!last_line! !line:~,-1!"
) else (
set "line=!line:~,-1!"
)
) else if defined continuation (
set "continuation="
set "line=!last_line! !line!"
for /f "tokens=1,2,* delims= " %%B in ("!line!") do set "_%%~B=%%~D"
set "line="
) else (
for /f "tokens=1,2,* delims= " %%B in ("!line!") do set "_%%~B=%%~D"
set "line="
)
set "last_line=!line!"
)
rem Set _SERVER_ROOT_DRIVES from _SERVER_ROOT_PATHS
set "_SERVER_ROOT_DRIVES="
for %%A in (!_SERVER_ROOT_PATHS!) do (
set "drive=%%~dA"
if defined drive (
set "drive=!drive:~,1!"
if defined _SERVER_ROOT_DRIVES (
set "_SERVER_ROOT_DRIVES=!_SERVER_ROOT_DRIVES! !drive!"
) else (
set "_SERVER_ROOT_DRIVES=!drive!"
)
)
)
rem Run robocopy (Remove echo and carets if looks OK to actually run robocopy)
for %%A in (%_SERVER_LIST%) do (
echo robocopy \\%%A\!_SERVER_ROOT_DRIVES!$\temp\log I:\temp\TEST-LOG\%%A *mask1* *mask2* /S /copyall /maxage:20200227 /xd *mask3* ^>^> I:\temp\output.log
)
Вывод echo
команды robocopy
совпадает с выводом кода в вопросе.
Код будет считывать список серверов и будет использовать такие ключевые слова, как SERVER_LIST
, и будет добавить начальное подчеркивание для использования в качестве имен переменных. Значения set
для имен переменных будут значениями в той же строке и будут включать значения в следующей строке, если обнаружен символ продолжения конца строки \
.
Буквы дисков извлекаются из _SERVER_ROOT_PATHS
и установлены в новую переменную с именем _SERVER_ROOT_DRIVES
.
Команда robocopy
будет отображена на консоли для просмотра, чтобы проверить, в порядке ли.
Может использовать set _
для просмотра ведущие подчеркнутые имена переменных и значения в скрипте для необходимости отладки.