バッチスクリプトで文字列を反復しようとしています:
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
私は何を間違っていますか?
バッチスクリプトで文字列を反復しようとしています:
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
私は何を間違っていますか?
これは、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 行を認識するため機能します。
FORの代わりにお試しくださいFOR /F。varまた、設定が不要な場合は値を引用します。
set var=1 2 3
for %%i in (%var%) do (
echo %%i
)
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
)