【问题标题】:system call with paths and spaces带有路径和空格的系统调用
【发布时间】:2018-06-07 08:30:41
【问题描述】:

我想使用 system() 到
1.打开cmd
2.保持打开/显示它
3.从给定路径运行“mybatchfile.bat”(包含空格)
4.将“2”作为参数传递。
这就是它的样子system("cmd.exe /k C:/Users/firstname secondname/desktop/mybatchfile.bat 2");

当我运行它时,我得到"C:/Users/firstname" 写入不正确或在我的命令提示符中找不到。

我该如何解决这个问题?我正在使用 Qt,而 Qt 使用“/”作为通用目录分隔符,就像在 URL 中使用“/”作为路径分隔符一样。所以我认为这不是问题所在。

我该如何解决这个问题?还有其他更简单的方法可以用来将参数传递给 Qt 中的批处理文件吗?任何帮助将不胜感激!

【问题讨论】:

  • 看到路径中的空格似乎导致了它,您不能尝试转义一个 " 吗?像这样:system("cmd.exe /k \"C:/Users/firstname secondname/desktop/mybatchfile.bat\" 2"); 它应该可以解决问题
  • 不了解 Qt,但通常希望将 Windows 路径用引号括起来,尤其是当它们中有空格时
  • Qt 与它无关。如果您在命令行执行C:/Users/firstname secondname/desktop/mybatchfile.bat 2,您将看到相同的行为,并且该问题的解决方案是相同的 - 引用路径。
  • @Ariart 谢谢你,这行得通,但现在它没有将“2”作为参数传递,有人知道我能做些什么吗?

标签: c++ qt path escaping system-calls


【解决方案1】:

要启动程序,您可以使用 QProcess,例如:

auto proc = new QProcess();
QString program = QString("\"%1%2\"").arg("C:/Users/firstname secondname/desktop/").arg("mybatchfile.bat");
QStringList arguments;
    arguments << "2";

proc->setWorkingDirectory("C:/Users/firstname secondname/desktop/");
proc->start( program, arguments );

此代码不是 testet,但应该是可运行的。

【讨论】:

  • 我试过你的代码有以下错误:错误:'mybatchfile'没有在这个范围内声明和错误:请求'proc'中的成员'start',它是指针类型QProcess *' (也许你打算使用 '->' ?)
  • 感谢编辑,我现在没有收到任何警告或错误,但它似乎仍然没有做我想做的事情,我的批处理基本上是:echo 1 - 退出程序echo 2 - Say Hi set /p QUESTION=你今天想做什么?: echo: IF %QUESTION%==1 GOTO :1 IF %QUESTION%==2 GOTO :2 :1 exit :2 cls echo HI I当我执行这段代码时没有得到任何输出,我错过了什么吗?再次感谢您的帮助!
猜你喜欢
  • 2012-08-30
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 2015-10-15
  • 2013-06-23
  • 2015-02-08
  • 2011-02-12
  • 1970-01-01
相关资源
最近更新 更多