在逃生的ProcessBuilder空间(Escape space in ProcessBuilde

2019-09-28 04:24发布

我无法在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:\用户\我的:术语“C:\用户\我的”未被识别为cmdlet,函数,脚本文件或可操作的程序的名称。 检查名称的拼写,或是否包含一个路径,验证路径是否正确,然后再试一次。

Answer 1:

String path="C:\\Users\\my dir\\SendMailPS.ps1";
ProcessBuilder processBuilderObject
            = new ProcessBuilder("powershell",path);

你实际上在这里做什么是运行一个行的PowerShell脚本调用你的SendMailPS脚本。 该单行脚本是受PowerShell的脚本解析,这是造成你的问题。

试试运行你的脚本是这样的:

String path="C:\\Users\\my dir\\SendMailPS.ps1";
ProcessBuilder processBuilderObject
            = new ProcessBuilder("powershell", "-File", path);

这明确地告诉PowerShell来运行指定文件作为脚本。

这里不要使用字符串contatenation:

// Don't do this
ProcessBuilder processBuilderObject
            = new ProcessBuilder("powershell -File " + path); // Don't do this
// Don't do this

尝试运行这种方式会给你带来更多的麻烦。



文章来源: Escape space in ProcessBuilder