您如何使用System()调用带有引号的参数的批处理文件
How do you call a batch file with an argument that has quotes, using system()
例如,在命令行中,该作品(第一个参数具有引号,但第二个参数没有):" test.bat" a" a" b即它知道" A"是第一个参数,B是第二个参数
但是使用System()它不起作用: system("test.bat" "a" b)
这也行不通: system("test.bat" "a" b)
,如果我们使用原始字符串文字,这将是最简单的。原始的字符串字面是在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)");
希望这会有所帮助!
有关原始字符串文字的更多信息:原始字符串文字是一个很棒的功能,它们基本上允许您将任何文本直接复制到您的程序中。它们从R
开始,然后是报价和括号。括号中只有包含的东西。示例:
using std::string;
string a = R"(Hello)"; // a == "Hello"
以"原始"开头和结尾:
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"
重要的是,我们以相同的字母字符串(称为定界符)开始并结束文字,然后是括号。这样可以确保我们永远没有理由逃避原始字符串字面的东西,因为我们可以随时更改定界符,因此它在字符串中找不到。
我现在开始工作:
system(R"(C:"to erasetest.bat" "a")");
我找到了答案: system("test.bat" ""a"" b);
或更精确:system(""test.bat" ""a"" b");
因此,答案是用双引号逃脱报价
相关文章:
- 如何在 c++ 窗口中将参数和返回的退出值传递到批处理文件/从批处理文件获取返回的退出值
- 从之前添加的批处理文件中删除单词
- 无法从C++ Windows 服务执行批处理文件
- 如何将批处理文件的输出读取到C 中的字符串中
- cmake:生成批处理文件调用cl.exe
- 如何运行批处理文件和读取输出
- GetCommandLine():无法从批处理文件(GCC-Compiler)传递多行参数
- exe文件不被识别为内部或外部命令,可操作的程序或批处理文件在C++
- 您如何使用System()调用带有引号的参数的批处理文件
- 重命名批处理文件(删除名称中的一些符号)(python/matlab/shell)
- 对桌面进行了更改.ini使用批处理文件,但文件夹图标不会更改
- 如何将字符串转换为批处理文件中的整数
- 为什么我不能在Windows Server 2008中使用System()从服务启动批处理文件
- 通过批处理文件在多个文件上添加标头
- 替代System(),用于在程序中运行批处理文件
- 在批处理文件上进行C++fstream写入,然后结束,没有剩余的代码行
- 创建 Windows 服务和批处理文件
- c++ 使用创建过程执行批处理文件
- c++ 将字符写入批处理文件
- 如何将带有空格作为参数的路径添加到CreateProcess批处理文件中