通过网络驱动器循环 robocopy
Loop robocopy through network drives
编辑:如果有人关心这里是我原始代码的工作版本。
只有删除 "Drive C" 路径中的 space,我才能让 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。
我也不明白为什么需要打开“%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
谢谢
亚历克斯
也许远离计数并使用 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 次。
我大概会这样写:
@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
编辑:如果有人关心这里是我原始代码的工作版本。 只有删除 "Drive C" 路径中的 space,我才能让 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。 我也不明白为什么需要打开“%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
谢谢 亚历克斯
也许远离计数并使用 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 次。
我大概会这样写:
@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