6

バッチスクリプトで文字列を反復しようとしています:

set var="1 2 3"

for /F %%i in (%var%) do (  
  echo %%i
)

そしてこの出力を得る:

C:\>batch.bat


C:\>set var="1 2 3"

C:\>for /F %i in ("1 2 3") do (echo %i )

C:\>(echo 1 )
1

3つの数字すべてが出力されることを期待しています:

1
2
3

私は何を間違っていますか?

4

3 に答える 3

16

これは、FOR/F が各行を複数のトークンに分割するためですが、処理するトークンの数を定義する必要があります。

set var="1 2 3"

for /F "tokens=1-3" %%i in (%var%) do (  
  echo %%i
  echo %%j
  echo %%k
)

編集:その他のソリューション

Ed harper の回答のように:
通常の FOR ループを使用することもできますが、ディスク上のファイルも検索しようとするという制限があり、 と に問題が*あり?ます。

set var=1 2 3

for %%i in (%var%) do  (
    echo %%i
)

または、FOR/F ループで改行テクニックを使用して、delim-character を改行に置き換えます。

setlocal EnableDelayedExpansion
set LF=^


set "var=1 2 3 4 5"
set "var=%var: =!LF!%"
for /F %%i in ("!var!") do (  
  echo %%i
)

これは、FOR/F が 1 行だけではなく改行で分割された 5 行を認識するため機能します。

于 2012-06-22T10:00:21.837 に答える
4

FORの代わりにお試しくださいFOR /Fvarまた、設定が不要な場合は値を引用します。

set var=1 2 3

for %%i in (%var%) do  (
echo %%i
)
于 2012-06-22T09:33:12.650 に答える
2

FOR /Fテキスト ファイルのすべての行をループするため、文字列 (""引用符で囲まれた) と共に使用すると、その行でのみ処理が行われます。空白で区切りますが、それはオプションで使用されますtokens

使用する必要がありますFOR

set var=1 2 3

for %%i in (%var) do (
  echo %%i
)

数値をループさせたい場合は、次を使用します。

for /L %%i in (1,1,3) do (
  echo %%i
)
于 2012-06-22T10:00:51.523 に答える