4

誰でもこれを行う方法を知っていますか?

コマンド ラインと Visual Studio のビルド後のスクリプトの両方から使用できるようにしたい .bat スクリプトがあります。

スクリプトは引数を取り、その一部にはスペースを含めることができます。

.bat スクリプトへのパスにはスペースを含めることができ、$(SolutionDir) に対する相対パスとして表現するのが最適です。

以下を含む、さまざまな引用符とエスケープ文字の組み合わせを使用して、コマンドラインの100のバリエーションのように見えるものを試しました。

"$(SolutionDir)myScript.bat" "$(SolutionDir)\" "$(Platform)" "$(Configuration)"

call "$(SolutionDir)myScript.bat" "$(SolutionDir)" "$(Platform)" "$(Configuration)"

cmd /c ""$(SolutionDir)myScript.bat" "$(SolutionDir)" "$(Platform)" "$(Configuration)""

しかし、それらはすべてエラーを生成し、機能する組み合わせを見つけることができず、通常は次のエラーが発生します。

"[path-to-script] is not recognized as an internal
or external command, operable program or batch file"

ビルド後のステップからこれを呼び出す適切な構文は何ですか?

外部ツールとして設定する際にも同様の問題が発生しているため、いずれかのヘルプがあれば大歓迎です!

4

1 に答える 1

9

正しい方向を示してくれたコメントの Pilotcam と James K に感謝します。私が抱えていた相互運用の問題は、VS2010 から呼び出そうとしたバッチ スクリプトの比較的単純なものでした。

コマンド ラインから呼び出されたときは、引用符で囲む必要のない相対パスを常に渡していました。VS2010 から呼び出されたとき、VS の $(SolutionDir) および引用符で囲まれた他のマクロの展開に基づいて完全なパスを指定していました。

バッチ スクリプトがこれらの引数を処理するとき、引用符文字が引数の一部として存在する可能性があるという事実を説明するように記述されていませんでした。したがって、最初に行ったのは、次のような空の引数のチェックでした。

if "%1"=="" goto usage

この最初の行は、次のようにVSから呼び出されたときに窒息していたものでした:

"$(SolutionDir)myScript.bat" "$(SolutionDir)"

...囲まれた引用符が %1 の値に変換されたため、if ステートメントが窒息していました。引数を囲む引用符がない場合と VS2010 の場合の両方で機能する適切な修正は、次のように %1 から引用符を削除することでした。

if "%~1"=="" goto usage

...そして、これを修正した後、残りの部分は問題なく機能しました。おそらくバッチ スクリプト 101 を使用しているため、Windows バッチ スクリプトを作成する頻度がわかります。

于 2012-10-07T01:55:16.053 に答える