编辑:如果有人关心我的原始代码的工作版本。 只需删除"驱动器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
由于 亚历
答案 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