0

私のバッチでは、可変量のソースをターゲット宛先にコピーしたいと考えています。

私は次のように定義したい:

@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%%%

提供するだけ

ソース1

期待値の代わりに

「C:\フォルダ1」

DelayedExpansion を使用してこれを解決できると思いましたが、何が欠けていましたか?

4

2 に答える 2

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!
)

最初の部分は、一連の個々の要素の割り当てに相当します。このようにして、新しい値のペアを簡単に追加できます。

バッチ ファイルでの配列管理の詳細については、「cmd.exe (バッチ) スクリプトの配列、リンク リスト、およびその他のデータ構造」を参照してください。

于 2015-08-06T18:49:54.200 に答える