powershell 运行 参数中有空格的 cmd

powershell run cmd with spaces in argument

我正在尝试为文件夹添加观察程序,创建文件后,启动程序

$script= "C:\test.py"
$watcher.Path ="e:\my folder\test folder\dropbox"    

Start-Process cmd -Argument "/k python $script $path" 

问题是,这总是让我出错说 e:\my no such file

我知道这是 space 的问题,但我尝试了以下方法,仍然得到同样的错误

Start-Process cmd -Argument "/k python $script '$path'" 

有谁知道如何解决这个问题?

非常感谢

您需要使用 转义嵌入式 双引号 Start-Process:

$script= "C:\test.py"
$path = "e:\my folder\test folder\dropbox"    

Start-Process cmd -Argument "/k python $script `"$path`"" 

否则,$path 值中的空格会在 cmd 收到参数时将路径分成 多个 个参数。

`""..." 字符串中逐字嵌入 "

顺便说一句:

  • 如果您的意图是 运行 命令 异步 ,在 new window(在 Windows 上),正如您的命令所建议的那样,Start-Process 确实是正确的工具。

  • 相比之下,如果您想要运行其他控制台应用程序(例如cmd) 同步,在同步window;在那种情况下,只需调用控制台应用程序 直接 - 请参阅 this answer 了解更多信息。

我试图 运行 一个 powershell cmd 来解析输入,特别是为了在服务器上获取 chrome 运行ning 的版本。

     String version = null;
     String command = "powershell.exe (Get-Item \"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe\").VersionInfo";
     Process process = Runtime.getRuntime().exec(command);
     process.getOutputStream().close();
     BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));       
     String line = reader.readLine();
     while(line!=null){
         if(line.matches("[0-9]{2,3}\.[0-9]{1,2}\..*")){
             version = line.substring(0, line.indexOf("."));
         }             
         line = reader.readLine();                
     }       

失败,错误指示命令在路径中的空格处被拆分。

我用单引号替换了转义的双引号,它起作用了:

String command = "powershell.exe (Get-Item 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe').VersionInfo";