【问题标题】:Executing Batch File From C++ with Spaces in the Path使用路径中的空格从 C++ 执行批处理文件
【发布时间】:2013-07-11 15:39:53
【问题描述】:

我想使用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\""

【问题讨论】:

  • 进入这个目录并确保你的文件存在C:\Users\500543\Documents\Batch File Project\Testing.bat
  • @Nick 据我了解,在尝试更改工作目录时,OP 会遇到同样的问题吗?
  • @g-makulik 我不是要更改工作目录。我要求确保 .bat 文件存在于他认为的位置。
  • @Nick 不会有任何区别...

标签: c++ batch-file cmd


【解决方案1】:

试试

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 问题! 我想您应该已经从这些示例中理解了原理:只需将您的批处理文件名包含在一对双引号字符中('\"' ),shell 可以正确解释它。 也有纯 c 库方法可用于实现此目的(请参阅 &lt;cstring&gt;),但如果您可以使用 c++ 标准库,我不推荐这些方法。

【讨论】:

    【解决方案2】:

    尝试在命令行周围添加转义的双引号,即

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

    【讨论】:

      【解决方案3】:

      你需要转义引号:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-21
        • 1970-01-01
        • 2021-03-31
        • 2021-08-16
        • 2014-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多