例如,在命令行中可以使用(第一个参数带引号,但第二个参数不带引号): “ test.bat”“ a” b 即知道“ a”是第一个参数,b是第二个参数
但是使用system()无效:
system("test.bat" "a" b)
这也不起作用:
system("test.bat" \"a\" b)
答案 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");
所以答案是用双引号将引号引起来