我试图在bat文件的循环中调用robocopy:
set basedir="C:\tmp"
set src[0]="%basedir%\src\A"
set src[1]="%basedir%\src\B"
set target[0]="%basedir%\target\A-out"
set target[1]="%basedir%\target\B-out"
set "x=0"
for %%i in (%src%) do (
robocopy /E %%src[%x%]%% %%target[%x%]%%
echo %%~i
REM cinst "%%~i"
set /a "x+=1"
)
但是robocopy的变量没有正确扩展,我在这里缺少什么?
答案 0 :(得分:0)
我不相信" %% src [%x%] %%"您在此处使用的语法有效。
这样的事情可能有用:
SET BaseDir="C:\Tmp"
SET Folders=A B
SET SrcDir=\src\
SET TargetDir=\target\
FOR %%I in (%Folders%) DO (
ROBOCOPY /E %BaseDir%%SrcDir%%%I %BaseDir%%TargetDir%%%I-Out
ECHO %%~I
REM cist "%%~I"
)
如果您的实际文件夹结构与上述示例不同,则可能无法正常工作。
答案 1 :(得分:0)
如果由于某种原因不想启用延迟扩展,则使用%%src[%x%]%%
变量语法,但仍需要使用嵌套变量。有两种方法可以正确地扩展它们。
您可以通过在脚本顶部添加行setlocal enabledelayedexpansion
然后调用!src[%x%]!
和!target[%x%]!
等变量来使用延迟扩展
您也可以简单地在call
命令前放置robocopy
,这也会正确扩展变量。 call robocopy /E %%src[%x%]%% %%target[%x%]%%
答案 2 :(得分:0)
我也试图用'来循环ROBOCOPY。我的批处理工作的唯一方法是使用' goto'。
以下是一个例子:
@echo off & setlocal enableextensions
cls
set /a x=0
for /f "delims=" %%A in ('TIME/T') do set "var=%%A"
:start
cls
color 73
echo ===================================
DATE /T
echo 1st time: %var%
echo %x% times, last time:
TIME /T
set /a x+=1
echo ===================================
ROBOCOPY C:\Users\source\ C:\Users\destination\ /E /ZB /COPYALL /R:0 /W:0 /V /NP /ETA /TEE /LOG+:C:\Users\log.log
timeout /t 30
goto start