将多个cmd.exe参数/参数传递给Shellexecute(ex)
Passing multiple cmd.exe parameters/arguments to ShellExecute(Ex)?
我一直在尝试使用ShellExecute
和ShellExecuteEx
执行cmd.exe /c /v:on
。但是,这两种方法似乎都只接受一个参数,因为当它遇到/v:on
时,The filename, directory name, or volume label syntax is incorrect.
在Windows 7下显示。
这是我尝试过的代码,目前正在弄乱(没有运气):
#include <windows.h>
int main()
{
SHELLEXECUTEINFO info = {0};
info.cbSize = sizeof(SHELLEXECUTEINFO);
info.fMask = SEE_MASK_NOCLOSEPROCESS;
info.hwnd = NULL;
info.lpVerb = NULL;
info.lpFile = "cmd.exe";
info.lpParameters = "/c /v:on SET example=stackoverflow & ECHO '!example! & pause'";
info.lpDirectory = NULL;
info.nShow = SW_SHOW;
info.hInstApp = NULL;
ShellExecuteEx(&info);
// wait for process to terminate
// WaitForSingleObject(info.hProcess, INFINITE);
return 0;
}
由于 cmd.exe
是可执行文件,因此您应该使用 CreateProcess()
而不是 ShellExecuteEx()
(无论如何,它只是内部打电话给CreateProcess()
,因此请删除中间人)。
无论如何,这不是ShellExecute()
问题。如果打开cmd.exe
窗口并输入完整的命令行:
cmd /c /v:on SET example=stackoverflow & ECHO '!example! & pause'`
您会遇到完全相同的错误,等等:
cmd/c/v:在设置示例上= stackoverflow&echo'!示例!& 暂停'文件名,目录名称或卷标签语法不正确。'!例子!"暂停"不被认为是内部或外部命令,可操作程序或批处理文件。
第一个错误的原因是因为/v
是cmd.exe
本身的参数,而不是/C
可以执行的单独命令。/C
(或/K
)之后的所有内容都是新的命令行,因此它必须是调用cmd.exe
时指定的最后一个参数。这在/C
(和/K
)的文档中说明了这一点:
如果指定了/c或/k,则命令行的其余部分 开关作为命令行处理
因此, /v:on
被解释为新命令行的第一个参数,因此它被视为显然不存在的文件名。
交换/V
和/C
参数,第一个错误消失了:
cmd/v:on/c设置示例= stackoverflow&echo'!示例!& 暂停''!例子!"暂停"不被认为是内部或外部命令,可操作程序或批处理文件。
现在,您会注意到!example!
并未按预期扩展。那是因为您没有引用命令行,因为/C
(和/K
)的文档说:
请注意,多个命令由命令分隔器'&amp;&amp;'如果被引号包围,则接受字符串。同样,出于兼容的原因,/x与/e:on:on/y相同,与/e:off和/r与/c相同。任何其他开关都被忽略。
因此,将命令行包裹在引号中,然后!example!
扩展:
cmd/v:on/c"设置示例= stackoverflow&echo'!示例!&暂停'"'堆栈溢出"暂停"不被认为是内部或外部命令,可操作程序或批处理文件。
最后,pause
无法正确解释,因为您将其放在ECHO
的单个引号中,而不是外部作为单独命令:
cmd/v:on/c"设置示例= stackoverflow&echo'!示例!'& 暂停"'堆栈溢出 '按任意键继续 。。。
然后您可以从 ECHO
中删除单个引号:
C: users ryan> cmd/v:on/c"设置示例= stackoverflow&echo!示例!&暂停"堆栈溢出按任意键继续 。。。
- 是否可以将要"ShellExecute"的文件包含在 dll 中?如果是这样,"ShellExecute"中的文件位置应该是什么?
- 无法在"catch(const std::exception &ex)"中捕获 std::invalid_argument
- VirtualAlloc/Ex 分配什么样的内存
- ShellExecute(和ShellExecuteEx)对我的URL不做任何事情
- 英特尔 TBB - "初始化关键部分 Ex":找不到标识符编译器错误
- C Windows.h如何在Shellexecute中使用变量
- Stroustrup Ex.7, Chap.4 - C++ Syntax
- ShellExecute 中的 cmd 命令
- ShellExecute 返回成功,但不执行文件
- 复制文件时如何调用取消?(使用复制文件 ex 函数和复制进度例程回调函数)
- C++ - 使用 Windows Photo Viewer 使用 ShellExecute 打开图像
- 如何使用http:uri方案启动默认的Web浏览器并使用Shellexecute访问主页
- 浏览器中的ShellExecute url并不总是将焦点设置在浏览器上
- 如何调用 ShellExecute 以使用 C++ 打开具有特定程序的文件,而无需关联相同的文件扩展名
- 我已经将红皮书 9ed ex. 3.7 从旧函数转换为 4.5 函数,但它没有显示任何内容
- ShellExecute in _beginthread
- 使用 ShellExecute c++ 打开长网址
- ShellExecute 以在 C++ 中打开.exe
- 将多个cmd.exe参数/参数传递给Shellexecute(ex)
- ShellExecute(Ex) with 'properties' 動詞