java - ProcessBuilder 中的逃逸空间

标签 java powershell processbuilder

我无法在 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 : The term 'C:\Users\my' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

最佳答案

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

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

关于java - ProcessBuilder 中的逃逸空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19092285/

相关文章:

java - 如何使用 Java 8 流生成 2D int 数组?

powershell - $宏替换 - ExpandString 限制

使用进程运行 shell 命令时的 java block

rest - 从 PowerShell 脚本调用 REST API

azure - 有没有办法在 PowerShell 替换脚本中替换 YAML 变量?

java - 使用 ProcessBuilder 在 .java 文件中运行 shell 命令

java - process Builder java无法运行java中的某些python代码。怎么解决?

Java 映射 Lambda 异常

java - JVM 在退出时挂起

java - 读取文本文件时出现 NullPointerException