繁体   English   中英

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

我知道这是空间问题,但我尝试了以下操作,仍然遇到相同的错误

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`"" 

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

`""..."字符串中嵌入一个逐字逐字的"

作为旁白:

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

  • 相比之下,如果要在同一窗口中同步运行其他控制台应用程序(例如cmd ),请不要使用Start-Process 在这种情况下,只需直接调用控制台应用程序 - 有关更多信息,请参阅此答案

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

     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";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM