1

%Edata%これが次のように記述された変数であると仮定すると"A;B;C;1;2;3;"、このコードはそれを一連の番号付き変数に分割できるはずです。

set /a c=0
FOR %%A IN (%Edata%) DO (
  set /a c=%c%+1
  set var%c%=%%A
  echo.^>^>^> Set "%%A" to "var%c%"
)

変数は想定どおりに毎回カウントアップしないvar0ため、結果のみが変数のすべての部分を設定しています。%c%誰かが理由を説明できますか?

4

1 に答える 1

2

このコードは機能します:

@echo off
setlocal EnableDelayedExpansion

set /a c=0
FOR %%A IN (%Edata%) DO (
  set /a c=!c!+1
  set var!c!=%%A
  echo.^>^>^> Set "%%A" to "var!c!"
)

スクリプトの問題は、デフォルトで変数が実行時ではなく解析時に展開されることです。この場合c、ループに入る前に 1 回だけ展開されるため、その値は常に 0 であり、変更されることはありません。

次のコマンドを使用して、実行時に変数の展開を有効にする必要があります。

setlocal EnableDelayedExpansion

!c! を使用する必要があります。for ループ内の %c% の代わりに。

于 2012-11-20T22:54:39.757 に答える