如何使用system()

时间:2019-03-15 20:44:37

标签: c++ windows

例如,在命令行中可以使用(第一个参数带引号,但第二个参数不带引号): “ test.bat”“ a” b 即知道“ a”是第一个参数,b是第二个参数

但是使用system()无效: system("test.bat" "a" b)

这也不起作用: system("test.bat" \"a\" b)

3 个答案:

答案 0 :(得分:1)

如果我们使用原始字符串文字,这将是最简单的。原始字符串文字是用c ++编写字符串的一种方式,这种方式不会使任何内容转义。让我们看一个例子:

char const* myCommand = R"(test.bat "a" b)"; 

开头的R表示它是原始字符串文字,如果您调用system(myCommand),它将完全等同于键入

$ test.bat "a" b

进入命令行。现在,假设您要在命令行中转义引号:

$ test.bat \"a\" b

使用原始字符串文字,这很简单:

char const* myCommand = R"(test.bat \"a\" b)"; 
system(myCommand); 

或者,或者:

system(R"(test.bat \"a\" b)"); 

希望这会有所帮助!

有关原始字符串文字的更多信息: Raw string literals是一个很棒的功能,它基本上允许您将任何文本直接复制+粘贴到您的程序中。它们以R开头,后跟引号和括号。仅包含括号内的内容。例子:

using std::string; 
string a = R"(Hello)";        // a == "Hello"

开头为“ raw”:

string b = R"raw(Hello)raw";  // b == "Hello"

开头为“ foo”

string c = R"foo(Hello)foo";  // c == "Hello"

开头为“ x”

string d = R"x(Hello)x";      // d == "Hello"

重要的是,我们用相同的字母字符串(称为定界符)开头和结尾,然后加上括号。这确保了我们永远都没有理由在原始字符串文字中转义某些内容,因为我们总是可以更改定界符,以便在字符串内部找不到该分隔符。

答案 1 :(得分:0)

我现在开始工作了:

system(R"(C:\"to erase\test.bat" "a")");

答案 2 :(得分:-3)

我找到了答案:system("test.bat" ""a"" b);

或更准确地说:system("\"test.bat\" ""a"" b");

所以答案是用双引号将引号引起来