我无法在Eclipse中执行以下代码:
public static void main(String[] arg){
String path="C:\\Users\\my dir\\SendMailPS.ps1";
ProcessBuilder processBuilderObject
= new ProcessBuilder("powershell",path);
try {
processBuilderObject.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
但如果路径为C:\\Users\\SendMailPS.ps1
,我可以执行它。所以问题在于空格,我该如何解决呢?
编辑:我也是这样尝试的
public static void main(String[] arg){
String path="C:\\Users\\my dir\\SendMailPS.ps1";
try {
Runtime.getRuntime().exec("powershell "+path);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
但没用。然后我直接从命令提示符
尝试>powershell
> C:\Users\SendMailPS.ps1
这给了我输出。但是以下行给了我错误
>powershell
> C:\Users\my dir\SendMailPS.ps1
错误:
C:\ Users \ my:术语“C:\ Users \ my”未被识别为 cmdlet的名称,函数,脚本文件或可运行的程序。检查 拼写名称,或者如果包含路径,请验证路径是否正确 纠正,然后再试一次。
答案 0 :(得分:2)
String path="C:\\Users\\my dir\\SendMailPS.ps1";
ProcessBuilder processBuilderObject
= new ProcessBuilder("powershell",path);
您在这里实际做的是运行一个调用SendMailPS脚本的单行PowerShell脚本。单行脚本受PowerShell脚本解析的影响,这会导致您的问题。
尝试以这种方式运行脚本:
String path="C:\\Users\\my dir\\SendMailPS.ps1";
ProcessBuilder processBuilderObject
= new ProcessBuilder("powershell", "-File", path);
这明确告诉Powershell将指定的文件作为脚本运行。
不在此处使用字符串连接:
// Don't do this
ProcessBuilder processBuilderObject
= new ProcessBuilder("powershell -File " + path); // Don't do this
// Don't do this
尝试以这种方式运行会给你带来更多麻烦。