通常、Patrick Cuff のソリューションは機能しますが、最初の 2 つの引数のいずれかに引用符で囲まれたスペースまたは特殊文字が含まれていると失敗します。引数がスペース以外で区切られている場合も失敗します。FOR /F 区切り文字を展開して と を含めることができますが,
;
、=
引数にこれらの引用符で囲まれた区切り文字が含まれていると失敗します。
&
次の改善により、や などの引用符で囲まれた特殊文字がサポートされます|
が、引数の区切り文字は依然として問題です。
@echo off
setlocal enableDelayedExpansion
set args=%*
for /f "tokens=1,2*" %%a in ("!args!") do (
endlocal
echo arg1=%%a arg2=%%b remainder=%%c
)
編集 これは、同じことを達成する USEBACKQ を使用したより簡単な変更です
for /f "usebackq tokens=1,2*" %%a in ('%*') do echo arg1=%%a arg2=%%b remainder=%%c
編集を終了
残念ながら、真に一般的なソリューションには、3 以降のすべてのパラメーターを解析する GOTO ループが必要です。以下の解決策は、すべての引用符のバランスが取れていて、すべての特殊文字が引用符で囲まれている限り機能します。
@echo off
setlocal
set "args="
:parseArgs
set args=%args% %3
shift /3
if "%~3" neq "" goto :parseArgs
if (%3) equ ("") goto :parseArgs
echo arg1=%1 arg2=%2 remainder=%args%
すべての制限をなくすには抜本的な対策が必要です。