バッチファイルの引数を3つの文字列に抽出しようとしています。最初に変数を使用してから、それを3つに分割してみました(区切り文字はスペースです)。
コード:
@echo off
set var=\s v4.12 1,2,3,4
for /f "tokens=1,2,3 delims= " %%a in ("%var%") do (
echo a is %%a, b is %%b, c is %%c
)
結果:
a is \s, b is v4.12, c is 1,2,3,4
しかし、varを引数に実装しようとすると:
新しいコード:
@echo off
for /f "tokens=1,2,3 delims= " %%a in ("%1") do (
echo a is %%a, b is %%b, c is %%c
)
実行:
test.bat \s v4.12 1,2,3,4
結果:
a is /s, b is , c is
エコーをオンにしてみたところ、引数がループに渡されていないことがわかりました。どうすれば修正できますか?
==========編集(これはAaciniの回答に応じたものです):
私の現在のコード:
for /f "tokens=1-3" %%a in ("%*") do (
echo First is %%a, Second is %%b, Third is %%c
:loopers
for /f "tokens=* delims=," %%d in ("%%c") do (
echo %%d
shift
if not "%%d"=="" (
goto :loopers else exit >nul
)
)
)
3番目のトークン(%% cは1,2,3,4に等しい)を取得した後、区切り文字としてコンマを使用して各数値を取得するためにループを再度作成する必要がありますが、試したところ、%cが無限に表示されます(値ですが、実際の%cテキスト)
結果は次のとおりです。
First is /s, Second is v1.4, Third is 1,2,3,4
1
%c
..infinite loop of %c..