1

簡単そうです。batファイルで、コマンドラインパラメーターを受け取るプログラムを呼び出します。パラメーターを1つの文字列として使用し、 ""を使用して試しましたが、パラメーターは1つしか表示されません(スペースにヒットしたと思われる場合)。

したがって、問題は、パラメータリストとして文字列を渡す方法です。実際の文字列は以下のとおりであり、「」などを使用してそのようにフォーマットする必要があります。

-U romeirj -P Abc123 -F C:\inetpub\wwwroot\russ\crexport\russ.rpt -O C:\inetpub\wwwroot\russ\russ.pdf -A "startdate: 01-01-2010" -A "gender:M" -A "type:PENDJUD"

バットファイルからそれを呼び出したいのは次のようになります

batfile.bat parmstring

batファイルの内容

program.exe %1
4

1 に答える 1

3

すべてのバッチパラメータがプログラムに渡されることになっている限り、指定したパラメータを使用してバッチを呼び出すだけで、バッチスクリプト内で次のコマンドを使用できます。

program.exe %*

呼び出されたプログラムにバッチパラメータの一部のみを渡したい場合、問題はさらに複雑になります。

残念ながら、引用符で囲まれた文字列内の引用符をエスケープする方法はありません。パラメータ区切り文字をエスケープすることもできません。したがって、単一のバッチパラメータ内にスペースと引用符の両方を同時に埋め込むことはできません。

SHIFTコマンドは主要なパラメーターを取り除くことができますが、%*常に元のパラメーターリストに展開されます。以前のSHIFT操作を無視します。

FOR / Fは引用符で囲まれた区切り文字を無視しないため、役に立ちません。

単純なFORは、引用符で囲まれたパラメーターリストを適切に解析できますが、ファイルシステムを使用して文字を展開*します。?それは問題になる可能性があります。

あとは、GOTOループをSHIFTと組み合わせて使用​​して、目的のパラメーターを含む文字列を作成するだけです。

最初の3つのパラメーターは厳密にバッチ・ファイル用であり、残りのパラメーターは呼び出されたプログラムに渡されると仮定します。

@echo off
setlocal

set "args="
:buildProgramArgs
if [%4]==[] goto :argsComplete
set args=%args% %4
shift /4
goto :buildProgramArgs

:argsComplete
program.exe %args%

::args %1 %2 and %3 are still available for batch use
于 2012-06-07T14:34:35.097 に答える