在我的批处理中,我想复制可变数量的源到目标目的地。
我想这样定义:
@setlocal EnableDelayedExpansion
set source1="C:\folder1"
set target1="f:\folder1"
set source2="C:\folder2"
set target2="f:\folder2"
...
set sourcen="C:\foldern"
set targetn="f:\foldern"
依赖于定义数量的文件夹
set numFolder=5
我想循环浏览文件夹:
set /a COUNT=0
:LOOP
echo %COUNT%
set /a COUNT+=1
rem write the NAME of the parameter variable (source1,source2 etc.) in nameor
set "nameor=source%COUNT%"
rem write the VALUE of the parameter variable (source1,source2 etc.) into origin ("C:\folder1", "C:\folder2")
set "origin=%nameor%"
echo %origin%
if %COUNT% lss %numFolder% goto LOOP
当我表演时
echo %nameor%
我得到了我的预期:source1,source2等。 但是
echo %%%origin%%%
仅提供
source1中
而不是预期值
“C:\ folder1”
我想,我可以通过使用DelayedExpansion解决这个问题,但我错过了什么?
答案 0 :(得分:1)
为了避免让我感到困惑,我改变了"起源"来源"来源"。例如。 set "origin=%nameor%"
已更改为set "source=%nameor%"
。
要打印出来" C:\ folder1"到" C:\ foldern",你应该使用echo !%source%!
,否则你只会看到" source1" to" sourcen"。
答案 1 :(得分:0)
您的问题只是数组元素管理。试试这个:
@echo off
setlocal EnableDelayedExpansion
rem Define the two arrays
set i=0
for %%a in ("C:\folder1=f:\folder1"
"C:\folder2=f:\folder2"
"C:\foldern=f:\foldern") do (
set /A i+=1
for /F "tokens=1,2 delims==" %%b in (%%a) do (
set source!i!="%%a"
set target!i!="%%b"
)
)
rem Show up to numFolder elements of both arrays
set numFolder=5
for /L %%i in (1,1,%numFolder%) do (
echo %%i- Source%%i=!source%%i!, Target%%i=!target%%i!
)
第一部分相当于您的一系列单个元素分配。这样就可以更容易地添加新的值对。
有关批处理文件中阵列管理的进一步说明,请参阅:Arrays, linked lists and other data structures in cmd.exe (batch) script