批处理脚本处理 For 循环中两个或多个参数集的列表,以在一行代码中执行

批处理脚本处理 For 循环中两个或多个参数集的列表,以在一行代码中执行
set listSource=Source_1 Source_2 Source_3
set listDestination=c:\Destination_1 c:\Destination_2 c:\Destination_3

:: Looking for one line like the example below
for /D /R %%A in (%listSource%) AND %%B in (%listDestination%) do ( robocopy %%A %%B)

::Instead of what I have currently...
for /D /R %%A in (Source_1) do robocopy %%A c:\Destination_1
for /D /R %%A in (Source_2) do robocopy %%A c:\Destination_2
for /D /R %%A in (Source_3) do robocopy %%A c:\Destination_3

所以我想替换{源目录}{目标目录}中的参数Robocopy命令变量该参考对应列表因此 Robocopy 将使用每个列表填充变量内容每次通过时(同时作为一个两套变量)。很简单,我试图消除不必要的重复,用一行代替多行来完成相同的任务。

_______清单A_________清单B_______

  1. 目录:\Source1 >>> c:\目标1
  2. 目录:\Source2 >>> c:\Destination2
  3. 目录:\Source3 >>> c:\Destination3

答案1

我觉得 powershell 会更好用,但我认为这就是你想要的(我留下了回声,这样你就可以看到它的作用),但你需要编辑以“echo robocopy”开头的行

X.BAT如下

@echo off
set listSource=Source_1~c:\Destination_1 Source_2~c:\Destination_2 Source_3~c:\Destination_3
for %%A in (%listSource%) do ( 
echo %%A
for /f "tokens=1,2 delims=~" %%C in ("%%A") do (
echo robocopy %%C %%D
)
)

给予

C:\Users\ross>x
Source_1~c:\Destination_1
robocopy Source_1 c:\Destination_1
Source_2~c:\Destination_2
robocopy Source_2 c:\Destination_2
Source_3~c:\Destination_3
robocopy Source_3 c:\Destination_3

相关内容