平台 Qt 5.15.2 Windows。
我有一个使用此代码的函数:
QString commstr = "c:/temp/cpath.bat";
QProcess::startDetached("cmd.exe", QStringList() << "/c" << "start" << commstr);
bat文件:
echo off
set PATH=%PATH%; more paths added here ...
它会打开一个控制台并运行
QString commstr
中包含的 .bat 文件。 bat 文件对路径进行临时更改,然后完成,使控制台保持打开状态以供进一步的用户交互。效果很好,正如预期的那样。
这里有一个奇怪的问题:如果用户 ID 嵌入了空格,即“joe user”,则 .bat 文件不会运行。控制台打开,但
commstr
从未执行。我一生都无法弄清楚为什么用户 ID 在这里很重要。
我无法想象用户 ID 在其中扮演什么角色。代码中未引用用户的主目录(例如“C:\Users\joe user”),程序也未安装在那里。该程序无论如何都不会出现其他嵌入空间目录的问题(例如“C:\Program Files”)。
QProcess::startDetached("cmd.exe", QStringList() << "/c" << "start" << "" << "/path/to/file.bat");
添加空标题字符串作为开始后的第一个参数解决了我的问题。
Syntax
START "title" [/D path] [options] "command" [parameters]
Key:
title Text for the CMD window title bar (required.)
path Starting directory.
command The command, batch file or executable program to run.
parameters The parameters passed to the command.```