私はfoo:bar:bazのような文字列を持っているとします。この文字列をループすることは可能ですか?ファイルの行をトークン化できるように見えましたが、以下の例は 'foo'を1回だけエコーします。文字列のトークンをループする方法は?
for /f "tokens=1,2* delims=:" %%x in ("%%j") do echo %%x
私はfoo:bar:bazのような文字列を持っているとします。この文字列をループすることは可能ですか?ファイルの行をトークン化できるように見えましたが、以下の例は 'foo'を1回だけエコーします。文字列のトークンをループする方法は?
for /f "tokens=1,2* delims=:" %%x in ("%%j") do echo %%x
set string=foo:bar:baz
for %%x in (%string::= %) do echo %%x
FOR ...あなたがかもしれない、...、
for /f "tokens=* delims=:" %%x in ("foo:bar:baz") do (
echo %%x
echo %%y
echo %%z
)
を%%x
をあなたは可能性がある処理または事前にあなたが得たどのように多くの項目がわからない場合区切り文字は、スペース、コンマ、セミコロン、等号とすることができます。要素がこれらの文字のいずれかで区切られている場合、文字列を直接処理することができます。そうでない場合は、これらの文字の区切り文字を変更してください(上記のように)。
set string=foo bar,baz;one=two
for %%x in (%string%) do echo %%x
予想通りそれは、それは%%x
%%y
%%z
にそれをトークン化ありません。だから、代わりにちょうど
@echo off
set string=foo:bar:baz
:again
for /f "tokens=1* delims=:" %%x in ("%string%") do (
echo %%x
set string=%%y
)
if not .%string%==. goto again
echo done
うーん、私は私が何をしたいと思いますが、ファイル内の行をループ私ができるようにトークンをループすることができることですA。これを行うには良い方法:http://stackoverflow.com/questions/6966558/batch-file-for-f-tokens –
Aaciniが私の最初の解決策に敗北しました。文字列にスペースや特殊文字を含めることができるように引用符を追加することで改善できますが、それでも正しい結果が得られます。
set "str=foo bar:biz bang:this & that"
for %%S in ("%str::=" "%") do echo %%~S
ソリューションには制限があります。
第二の溶液の特殊文字がある場合は特に、文字列はすでに引用符( ")が含まれている場合
:
の区切り文字を改行文字に置き換える方法があります。また、次の行は遅延変数展開を終了する!
で始まる必要があります。先頭に空白を入れないでください。 もうひとつ気になるのは、厄介なFOR/F「EOL」オプションです。デフォルトでは;
というEOL文字で始まる値はスキップしたくありません。文字列デリミタ:
を削除したので、安全にEOLとして使用できます。
最後に遅延拡張を使用する必要がありますが、ループ内の遅延拡張を最初に無効にしないと、%% S展開中に!
が壊れます。
set "str=foo bar:biz bang:this & that "^& the other thing!":;How does this work?"
setlocal enableDelayedExpansion
set ^"str=!str::=^
!"
for /f "eol=: delims=" %%S in ("!str!") do (
if "!!"=="" endlocal
echo %%S
)
私はこの技術は、あなたがそれに投げるものは何でも処理できると信じています。
jebはバッチ内で改行を処理する方法を最初に示していました。特に、このテクニックの使い方を教えてください。それはSOのどこか他の場所に既に投稿されているかもしれません。
これは、(ループの変数アクセス可能な外に文字列を解析します。
setlocal enabledelayedexpansion
set your_string="whatever:you:want"
for /f "tokens=1,2,3 delims=:" %%a in ('echo !your_string!') do (
set first_sub_string=%%a
set second_sub_string=%%b
set third_sub_string=%%c
)
echo Congrats. !your_string! was parsed as !first_sub_string!, !second_sub_string!, !third_sub_string!
+1簡単に! –