Java - > CreateProcess error = 2,系统找不到指定的文件

时间:2017-08-08 00:10:53

标签: java processbuilder

我面临以下错误:

java.io.IOException: Cannot run program "C:\abc\man\b\manu.bat C:\Users\12x\test\testFiles\abc.properties" (in directory "C:\Users\12x\test\testFiles\abc.properties"): CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048).

请找到我正在使用的代码:

public class TestProcess {


public TestProcess(Path workPath, Path exe, Path logbackConfig, 
                     Path propertyfile) throws IOException {

    String exeSuffix = "";
    if (OS.indexOf("win") >= 0) {
      exeSuffix = ".bat";
    }
    builder = new ProcessBuilder()
            .directory(workPath.toFile())

            .command(workPath.resolve(exe).toAbsolutePath().toString() + exeSuffix+ " " + propertyfile)
            .redirectOutput(Redirect.INHERIT)
            .redirectError(Redirect.INHERIT);

我的目标是运行一个bat文件(存在于C:\ abc \ man \ b文件夹中),然后是abc.properties(位于另一个文件夹C:\ Users \ 12x \ test \ testFiles中)。 / p>

在上面的代码中,workPath的值为

C:\abc\man\b

和propertyfile有

C:\Users\12x\test\testFiles

2 个答案:

答案 0 :(得分:0)

您没有使用正确的语法:您不能在字符串中连接程序及其参数,因为ProcessBuilder不是解析器。

相反,构建一个名为propertyfile_path_string的String,该属性对应于属性文件,并用这一行替换你的行.command(...)

.command(workPath.resolve(exe).toAbsolutePath().toString() + exeSuffix, propertyfile_path_string)

答案 1 :(得分:-1)

您不能直接在Windows中exec() .bat文件。您必须插入cmd /c