秘密基地、どこに作った?

set echo off
pause
set TEST="1,2,3,4"
pause
for /f "delims=," %%i in (%TEST%) do echo %%i
pause

-------------------------------------------

結果(希望):
 1
 2
 3
 4

の様な出力を行いたいのですが、

結果(現実)
 1

のような出力になってしまいます。

[TEST]の値は固定(ダブルクォーテーションで囲まれた文字列)で何とか、カンマ区切りで取得したデータの回数、回す事は出来無いでしょうか。

稚拙な文章ですが、宜しくお願い致します。

A 回答 (3件)

TESTの値が固定と言うことなので、” を削除(空に置換)すればいいです。



for %%i in (%TEST:"=%) do echo %%i
    • good
    • 0

SET文のダブルクォーテーションの囲みをやめて


for文の/Fを止めたらご希望通りに動きました。
for~inに設定する際にカンマ文字は区切として認識されるようです。
(下記実行例1参照)

ダブルクォーテーションで囲むと1行のデータとして看做され
delims区切の先頭トークン"1"だけ処理されるようですね。
tokens=1-4とか指定すると%%iに1個目が入り、i以降j,k,lと
自動的に変数がセットされますが、処理しづらくなります。
(下記実行例2参照)

バッチコマンド(1)
------------------------------------------
set TEST=1,2,3,4
for %%i in (%TEST%) do echo %%i
------------------------------------------
結果(1)
------------------------------------------
D:\TEMP>set TEST=1,2,3,4

D:\TEMP>for %i in (1 2 3 4) do echo %i

D:\TEMP>echo 1
1

D:\TEMP>echo 2
2

D:\TEMP>echo 3
3

D:\TEMP>echo 4
4

D:\TEMP>
------------------------------------------


バッチコマンド(2)
------------------------------------------
set TEST="1,2,3,4"
for /F "delims=, tokens=1-4*" %%i in (%TEST%) do echo %%i %%j %%k %%l
------------------------------------------
結果(2)
------------------------------------------
D:\TEMP>set TEST="1,2,3,4"

D:\TEMP>for /F "delims=, tokens=1-4*" %i in ("1,2,3,4") do echo %i %j %k %l

D:\TEMP>echo 1 2 3 4
1 2 3 4

D:\TEMP>
------------------------------------------
    • good
    • 0

set echo off


pause
set TEST=1 2 3 4
pause
for %%i in (%TEST%) do echo %%i
pause
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報