Loop Robocopy через сетевые диски - PullRequest
0 голосов
/ 08 мая 2018

РЕДАКТИРОВАТЬ: Если кому-то все равно, вот рабочая версия моего исходного кода. Только удалив пробел в пути «Диск C», я смог получить робокопию, чтобы выбрать параметры / r: 1 / w: 1. Теперь я знаю, что это не лучший способ сделать это.

@echo off
setlocal enabledelayedexpansion
set "count=1"
set "local=c:\cmd_Scripts\"

:update
echo Connecting to machine !count!.
if exist "\\10.3.71.6!count!\Disk_C\cmd_Scripts\" (
    robocopy %local% \\10.3.71.6!count!\Disk_C\cmd_Scripts\ /r:1 /w:1
    echo Machine !count! DONE.
    echo.
    set /a count+=1
    if /i !count! LEQ 9 goto update
) else (
    echo MAchine !count! not available.
    echo.
    set /a count+=1
    if /i !count! LEQ 9 goto update
)

Итак, я снова застрял. Если сетевой диск доступен, работает нормально, но если он недоступен, следует перейти к следующему IP. Также я не понимаю, почему нужно открыть «% target%, но не могу закрыть». И из-за этого не может передаваться никакие параметры, такие как / r: 1 /: w1

@echo off
set count=1
set "local=c:\cmd_Scripts\"
set "target=\\10.3.71.6%count%\Disk C\cmd_Scripts\"

:update
if exist %target% (
    set "target=\\10.3.71.6%count%\Disk C\cmd_Scripts\"
    robocopy %local% "%target%
    set /a count+=1
    if /i %count% LEQ 9 goto update
) else (
    set /a count+=1
    if /i %count% LEQ 9 goto update
)   
pause

Спасибо Alex

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Я бы, наверное, написал это так:

@Echo Off
Set "DLocal=C:\cmd_Scripts"
Set "IPBase=\\10.3.71.6"

For /L %%A In (1 1 9) Do If Exist "%IPBase%%%A\Disk %DLocal::=%\" (
    RoboCopy "%DLocal%" "%IPBase%%%A\Disk %DLocal::=%" /<options>
)
Pause

Редактировать

То, что следует, фактически повторяет мой ответ, но с большим сходством с вашим кодом вопроса. Это означает, что вы можете предварительно установить %target% и использовать его в цикле, не включая отложенное расширение.

@Echo Off
Set "local=C:\cmd_Scripts"
Set "target=\\10.3.71.6%%A\Disk %local::=%"

For /L %%A In (1 1 9) Do (
    Echo %target%
    If Exist "%target%\" RoboCopy "%local%" "%target%" /<options>
)
Pause
0 голосов
/ 08 мая 2018

Возможно, отойдите от счета и используйте вместо него for /l.

@echo off
set "local=c:\cmd_Scripts\"
for /l %%i in (1,1,9) do (
if exist "\\10.3.71.6%%i\Disk C\cmd_scripts\" robocopy "%local%" "\\10.3.71.6%%i\Disk C\cmd_scripts\"
)

если вам действительно нужно установить переменную target:

@echo off
Setlocal enabledelayedexpansion
set "local=c:\cmd_Scripts\"
for /l %%i in (1,1,9) do (
set "target=\\10.3.71.6%%i\Disk C\cmd_scripts\"
if exist "!target!" robocopy "!local!" "!target!"
)

Из cmdline выполните for /?, чтобы понять, что он делает, особенно с переключателем /l. но вкратце (1,1,9) означает, что мы считаем от 1, от 1 с до 9 и в этом случае выполняем команды в скобках 9 раз.

...