通过网络驱动器循环robocopy

时间:2018-05-08 14:25:30

标签: batch-file cmd robocopy

编辑:如果有人关心我的原始代码的工作版本。 只需删除"驱动器C"路径我可以获得robocopy来获取/ 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。 另外,我不明白为什么需要打开"%目标%但不能关闭"。因此,不能通过任何选项,如/ 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

由于 亚历

2 个答案:

答案 0 :(得分:1)

可能会远离计数并改为使用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开始计数,在1s到9,并在这种情况下执行带括号的命令9次。

答案 1 :(得分:1)

我可能会这样写:

@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