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";
我正在尝试为文件夹添加观察程序,创建文件后,启动程序
$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";