在循环中从bat文件调用程序

时间:2015-04-10 14:52:59

标签: windows loops batch-file

我试图在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的变量没有正确扩展,我在这里缺少什么?

3 个答案:

答案 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
  • 每30秒循环一次
  • 增量日志
  • 在终端上显示日志并保存到文件
  • 显示第一次和最后一次启动循环