![](/img/trans.png)
[英]How to preserve multiple spaces as a string argument for powershell in cmd in Windows 10
[英]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.