Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 通过网络驱动器循环robocopy_Batch File_Cmd_Robocopy - Fatal编程技术网

Batch file 通过网络驱动器循环robocopy

Batch file 通过网络驱动器循环robocopy,batch-file,cmd,robocopy,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”路径中的空间,我才能让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
谢谢
Alex

可能会远离计数,而使用
代替/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\"
)
如果确实需要设置
目标
变量:

@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中,对/?执行
以了解它的功能,尤其是使用
/l
开关。但简而言之,执行
(1,1,9)
意味着我们从
1
开始计数,在1s到
9
之间,在这种情况下执行括号内的命令9次。

可能会远离计数,而使用
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\"
)
如果确实需要设置
目标
变量:

@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中,对/?
执行
以了解它的功能,尤其是使用
/l
开关。但简而言之,执行
(1,1,9)
意味着我们从
1
开始计数,从1s到
9
,在这种情况下执行括号内的命令9次。

我可能会这样写:

@Echo关闭
设置“DLocal=C:\cmd\u脚本”
设置“IPBase=\\10.3.71.6”
对于(11 9)中的/L%%A,如果存在请执行“%IPBase%%%A\磁盘%D本地::=%”(
机器人副本“%DLocal%”%IPBase%%%A\Disk%DLocal::=%/
)
暂停
编辑

下面的内容实际上重复了我的答案,但与您的问题代码更为相似。这意味着您可以预设
%target%
并在循环中使用它,而无需启用延迟扩展

@Echo关闭
设置“local=C:\cmd\u脚本”
设置“目标=\\10.3.71.6%%A\Disk%本地::=%
对于(11 9)Do中的/L%%A(
回显%目标%
如果存在“%target%\”机器人副本“%local%”“%target%”/
)
暂停

我可能会这样写:

@Echo关闭
设置“DLocal=C:\cmd\u脚本”
设置“IPBase=\\10.3.71.6”
对于(11 9)中的/L%%A,如果存在请执行“%IPBase%%%A\磁盘%D本地::=%”(
机器人副本“%DLocal%”%IPBase%%%A\Disk%DLocal::=%/
)
暂停
编辑

下面的内容实际上重复了我的答案,但与您的问题代码更为相似。这意味着您可以预设
%target%
并在循环中使用它,而无需启用延迟扩展

@Echo关闭
设置“local=C:\cmd\u脚本”
设置“目标=\\10.3.71.6%%A\Disk%本地::=%
对于(11 9)Do中的/L%%A(
回显%目标%
如果存在“%target%\”机器人副本“%local%”“%target%”/
)
暂停

如果目标存在,是否重新设置?为什么?我想。。。我被%count%,var内部的var搞糊涂了…好的,我明白你在那里试图做什么了,让我快速回顾一下。看一看。@SirAleXbox在Compos版本中,延迟的扩展是不需要的。在原始批处理中,您在(代码块)中设置并使用了一个变量,这就是您必须启用并使用延迟扩展的经典原因!变数感叹号中的名称。如果目标存在,是否重新设置?为什么?我想。。。我被%count%,var内部的var搞糊涂了…好的,我明白你在那里试图做什么了,让我快速回顾一下。看一看。@SirAleXbox在Compos版本中,延迟的扩展是不需要的。在原始批处理中,您在(代码块)中设置并使用了一个变量,这就是您必须启用并使用延迟扩展的经典原因!变数感叹号中的名称。