【问题标题】:system() command with spaces带空格的 system() 命令
【发布时间】:2019-05-07 03:31:54
【问题描述】:

我正在尝试通过system() 命令执行 PowerShell 命令,但由于字符串中的空格而遇到异常,我尝试了一些方法但仍然遇到相同的异常。

代码:

system("powershell.exe -command Invoke-WebRequest http://example.com/myEXE.exe -OutFile C:\\Program Files\\myEXE.exe");

这是我得到的例外:

Invoke-WebRequest :找不到接受的位置参数 参数“文件\myEXE.exe”。 在行:1 字符:1 + 调用 WebRequest http://example.com/myEXE.exe -OutFile C:\Program File ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

【问题讨论】:

  • 引用OutFilesystem("powershell.exe -command Invoke-WebRequest http://example.com/myEXE.exe -OutFile 'C:\\Program Files\\myEXE.exe'");
  • 成功了,谢谢!我尝试对 system("'C:\\Program Files\\myEXE.exe'"); 做同样的事情。启动 exe 但它将“程序”和“文件”分开,知道如何使它工作吗?
  • Windows 可以使用PROGRA~1 来寻址Program Files。因此,'C:\\PROGRA~1\\myEXE.exe' 应该可以工作
  • 我正在尝试用 %appdata% 做同样的事情,但不能让它工作,还有类似的快捷方式吗?
  • this question 的答案为您指明了如何在 windows 下解析特殊路径(如%appdata%)的正确方向。在 Windows 上运行其他程序(包括 powershell)的正确方法是使用CreateProcess

标签: c++ powershell


【解决方案1】:

我相信这应该可行:

#include <iostream>
#include <bits/stdc++.h>
int main(){
    std::cout << "trying system command" << std::endl;
    system("powershell.exe -command Invoke-WebRequest https://make.sure.valid.url.to.test.otherwise.will.fail.anyways -OutFile 'C:/Program` Files/myEXE.exe'");
}

` 字符应该允许您正确地转义空格。

【讨论】:

  • powershell 命令已经适用于上面建议的解决方案,我用我的第二个命令尝试了您的解决方案,但它甚至没有让我包含 。 .. 这是我需要工作的命令:system("'C:\\Program Files\\myEXE.exe'");
猜你喜欢
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
相关资源
最近更新 更多