5

バッチ ファイルに渡された最初の 2 つの引数を使用し、それ以外のすべてをバッチ ファイルで実行されるコマンドに追加したいと考えています。

それを行う簡単な方法はありますか?

// batch file
command -Duser=%1 -Dpwd=%2 {? how to pass all remaining arguments on the command line}

バッチはこのように実行されます

batch.bat USR PWD -Dargument1=1 -Dargument2=2

効果的に、私は以下を実行したいと思います

command -Duser=USR -Dpwd=PWD -Dargument1=1 -Dargument2=2
4

3 に答える 3

3

コマンドはforあなたが望むものを与えるはずです:

for /f "tokens=1,2*" %%a in ("%*") do echo command -Duser=%%a -Dpwd=%%b %%c

for( )のヘルプからfor /?:


FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k myfile.txt の各行を解析し、セミコロンで始まる行を無視し、各行の 2 番目と 3 番目のトークンを for 本文に渡します。トークンはコンマやスペースで区切られます。 for body ステートメントが %i を参照して 2 番目のトークンを取得し、%j を参照して 3 番目のトークンを取得し、%k を参照して 3 番目以降の残りのすべてのトークンを取得することに注意してください。 スペースを含むファイル名については、ファイル名を二重引用符で囲む必要があります。この方法で二重引用符を使用するには、usebackq オプションも使用する必要があります。そうしないと、二重引用符は、解析するリテラル文字列を定義するものとして解釈されます。


したがって、私のソリューションで%%aは、スクリプトに渡される最初の引数%%bの値、2 番目の引数の値、および%%c残りの引数があります。

batch.bat USR PWD -Dargument1=1 -Dargument2=2コマンドプロンプトから実行すると、次のようになります。

command -Duser=USR -Dpwd=PWD -Dargument1=1 -Dargument2=2

引数を指定してコマンドを呼び出すには、 のecho後のを削除します。do

于 2012-09-07T13:32:38.777 に答える
2

通常、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%

すべての制限をなくすには抜本的な対策が必要です。

于 2012-09-07T15:40:50.727 に答える
1

これはあなたが望むものかもしれません

C:>help shift
Changes the position of replaceable parameters in a batch file.

SHIFT [/n]

If Command Extensions are enabled the SHIFT command supports
the /n switch which tells the command to start shifting at the
nth argument, where n may be between zero and eight.  For example:

    SHIFT /2

would shift %3 to %2, %4 to %3, etc. and leave %0 and %1 unaffected.
于 2012-09-07T12:26:58.580 に答える