1

を使用してバッチファイルを実行したいのですsystem()が、ファイルへのパスが関数に渡されるため、次のようになります。

void executeBatch(char* BatchFile){
    system(BatchFile);
}

ここでの問題は、渡されたパスにスペースを無視するためのエスケープ引用符がないことです。たとえば、ユーザーは次のように入力します。

"C:\\Users\\500543\\Documents\\Batch File Project\\Testing.bat"

渡されたパスにエスケープ引用符を追加するにはどうすればよいですか?

だから私は本質的に変更します:

"C:\\Users\\500543\\Documents\\Batch File Project\\Testing.bat"

"\"C:\\Users\\500543\\Documents\\Batch File Project\\Testing.bat\""
4

3 に答える 3

2

試す

system("\"C:\\Users\\500543\\Documents\\Batch File Project\\Testing.bat\"");

コメントからの追加の質問については、次を使用する必要があります。

char* it = "\"C:\\Users\\500543\\Documents\\Batch File Project\\Testing.bat\"";

system(it);

それから。

を使用するように質問をマークしたため、関数を正しく実装するための C++ ソリューションを次に示します。

#include <sstream>

int executeBatch(const char* fullBatchFileName)
{
    std::ostringstream oss;

    oss << '\"' << fullBatchFileName << '\"';
    return system(oss.str().c_str());
}

これを XY 問題にしないでください。これらのサンプルから原理を理解しているはずです'\"'。シェルが正しく解釈できるように、バッチ ファイル名を二重引用符 ( ) のペアで囲むだけです。これを実現するために使用できる純粋な C ライブラリ メソッドもありますが (「参考文献」を参照<cstring>)、C++ 標準ライブラリを使用できる場合は、これらをお勧めしません。

于 2013-07-11T15:41:56.450 に答える
0

コマンドラインの前後にエスケープされた二重引用符を追加してみてください。

system("\"C:\\Users\\500543\\Documents\\Batch File Project\\Testing.bat\"");
于 2013-07-11T15:42:03.237 に答える