1

我无法在 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();
    }
}

但是如果 path 是 as ,我可以执行它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、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。

4

1 回答 1

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

尝试以这种方式运行它会给您带来更多麻烦。

于 2013-09-30T17:35:54.700 回答