java执行cmd文件失败
java execute cmd file fails
我正在编写一个 java 程序,它会在某个时候执行 cmd 文件。
两者都在同一个目录中。
我正在使用 ProcessBuilder,因为它更灵活。
但是,当我 运行 此代码失败时:
String current_directory = System.getProperty("user.dir");
ProcessBuilder builder=new ProcessBuilder(current_directory+"\"+ "myCmdFile.cmd");
builder.directory(new File(current_directory));
File log = new File("log.txt");
builder.redirectErrorStream(true);
builder.redirectOutput(Redirect.appendTo(log));
Process process=builder.start();
process.waitFor();
System.out.println("CMD file executed");
我得到这个异常:
java.io.IOException: Cannot run program "C:\test\myCmdFile.cmd" (in directory "C:\test"): No such file or directory
at java.lang.ProcessBuilder.start(Unknown Source)
at org.java.test.executeCmdFile(MyMainClass.java:189)
at org.java.test.main(MyMainClass.java:70)
Caused by: java.io.IOException: No such file or directory
at java.lang.ProcessImpl.openForAtomicAppend(Native Method)
at java.lang.ProcessImpl.newFileOutputStream(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 3 more
但是,当我注释掉这些行时,它起作用了:
ProcessBuilder builder=new ProcessBuilder(current_directory+"\"+
"myCmdFile.cmd");
//builder.directory(new File(current_directory));
//File log = new File("log.txt");
// builder.redirectErrorStream(true);
// builder.redirectOutput(Redirect.appendTo(log));
Process process=builder.start();
process.waitFor();
System.out.println("CMD file executed");
我需要这些行,因为我想要日志消息。
我发现了我的错误……这是一个愚蠢的错误……这段代码确实有效:
String current_directory = System.getProperty("user.dir");
ProcessBuilder builder=new ProcessBuilder(current_directory+"\"+ "myCmdFile.cmd");
builder.directory(new File(current_directory));
File log = new File("log.txt");
builder.redirectErrorStream(true);
builder.redirectOutput(Redirect.appendTo(log));
Process process=builder.start();
process.waitFor();
System.out.println("CMD file executed");
问题出在这一行:
File log = new File("log.txt");
在我的生产环境中,这是一条很长的路径(这是错误的),但是出于演示目的,我在将问题发布到此处之前对其进行了更改。我认为问题与 cmd 文件有关,异常告诉我整个时间......现在在我为日志文件提供正确的路径后它工作......谢谢大家
我正在编写一个 java 程序,它会在某个时候执行 cmd 文件。 两者都在同一个目录中。
我正在使用 ProcessBuilder,因为它更灵活。 但是,当我 运行 此代码失败时:
String current_directory = System.getProperty("user.dir");
ProcessBuilder builder=new ProcessBuilder(current_directory+"\"+ "myCmdFile.cmd");
builder.directory(new File(current_directory));
File log = new File("log.txt");
builder.redirectErrorStream(true);
builder.redirectOutput(Redirect.appendTo(log));
Process process=builder.start();
process.waitFor();
System.out.println("CMD file executed");
我得到这个异常:
java.io.IOException: Cannot run program "C:\test\myCmdFile.cmd" (in directory "C:\test"): No such file or directory
at java.lang.ProcessBuilder.start(Unknown Source)
at org.java.test.executeCmdFile(MyMainClass.java:189)
at org.java.test.main(MyMainClass.java:70)
Caused by: java.io.IOException: No such file or directory
at java.lang.ProcessImpl.openForAtomicAppend(Native Method)
at java.lang.ProcessImpl.newFileOutputStream(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 3 more
但是,当我注释掉这些行时,它起作用了:
ProcessBuilder builder=new ProcessBuilder(current_directory+"\"+
"myCmdFile.cmd");
//builder.directory(new File(current_directory));
//File log = new File("log.txt");
// builder.redirectErrorStream(true);
// builder.redirectOutput(Redirect.appendTo(log));
Process process=builder.start();
process.waitFor();
System.out.println("CMD file executed");
我需要这些行,因为我想要日志消息。
我发现了我的错误……这是一个愚蠢的错误……这段代码确实有效:
String current_directory = System.getProperty("user.dir");
ProcessBuilder builder=new ProcessBuilder(current_directory+"\"+ "myCmdFile.cmd");
builder.directory(new File(current_directory));
File log = new File("log.txt");
builder.redirectErrorStream(true);
builder.redirectOutput(Redirect.appendTo(log));
Process process=builder.start();
process.waitFor();
System.out.println("CMD file executed");
问题出在这一行:
File log = new File("log.txt");
在我的生产环境中,这是一条很长的路径(这是错误的),但是出于演示目的,我在将问题发布到此处之前对其进行了更改。我认为问题与 cmd 文件有关,异常告诉我整个时间......现在在我为日志文件提供正确的路径后它工作......谢谢大家