1

いくつかのパラメーターを使用して exe を呼び出すバッチ スクリプトがあります。

現在、次のようにパラメーターをexeに渡していました。

$>my_cmd.exe %*

my_cmd.exe プログラムのオプションの 1 つは、スペースを含むことができる引数を取ります

$>my_cmd.bat --req "in: lava"  (OK my prog receives in: lava)

$>my_cmd.bat --req 'in: lava'  (NOK my program receives 'in: lava')

ユーザーは一重引用符または二重引用符を区別せずに使用します。

二重引用符はバッチ スクリプト レベルで使用されるため、二重引用符で動作しますが、' (一重引用符) を使用すると、そのまま残り、私のプログラムに渡されます。

my_cmd はマルチプラットフォームであり、UNIX では一重引用符と二重引用符の両方が特殊文字です。

プラットフォームに応じて my_cmd プログラムで特定のことをする必要がないようにしたいと思います。

シェル スクリプトとバッチ スクリプトで同じ動作をさせる方法はありますか。たとえば、バッチ スクリプトは、存在する場合、一重引用符を食べることができますか?

あなたにとって最善の解決策を教えてください。

どうもありがとう

4

2 に答える 2

1

Windows では、引数の処理 (および引用、グロビングなどの規則) はアプリケーションの責任です。すべてのパラメータを引用符で囲んだ単一の文字列以外をコードで使用している場合、これは、開発ツールが の結果に対して何らかの前処理を行ったためであることを理解してくださいGetCommandLine。したがって、別の見積もり処理については、OS ではなく、開発ツールを確認する必要があります。GetCommandLine多くの場合、最適なオプションは、自分自身を呼び出して、コンパイラで提供されているライブラリではなく、選択したライブラリを使用して処理することです。

とはいえ、Windows シェル チームはこれらのライブラリの 1 つを提供しています。を参照してくださいCommandLineToArgvW。ただし、これはコア OS の一部ではなく、使用は完全にオプションです。

さらに、バッチ プロセッサは、変数置換を行うときに引用符を考慮します。そして、その動作を変更したり無効にしたりするのは困難ですが、それが問題の原因であるようには思えません.

于 2012-05-24T17:57:28.827 に答える
0

引用符を2倍に変更してみませんか?

set args=%*
my_cmd.exe %args:'="%
于 2012-05-24T17:25:53.470 に答える