2017-07-28 5 views
0

Ich schreibe ein Java-Programm, das eine cmd-Datei an einem bestimmten Punkt ausführt. Beide befinden sich im selben Verzeichnis.java ausführen cmd-Datei schlägt fehl

Ich benutze den ProcessBuilder, da es flexibler ist. Jedoch, wenn ich diesen Code ausführen es fehlschlägt:

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"); 

ich diese Ausnahme erhalten:

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 

Allerdings, wenn ich diese Zeilen auf Kommentar als es funktioniert:

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"); 

Ich brauche Diese Zeilen, da ich Log-Nachrichten haben möchte.

+0

Enthält current_directory einen absoluten Pfad ? –

+0

@Alexander ja, sry, habe diese Zeile vergessen (ich habe meine Frage bearbeitet). – Norbert94

+0

Sorry, sieht aus wie ich einen Kaffee brauche. – GhostCat

Antwort

0

ich mein Fehler gefunden ... es war ein dummer one..This Code tatsächlich funktioniert:

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"); 

Das Problem war, diese Zeile:

File log = new File("log.txt"); 

In meiner Produktionsumgebung es war langer Weg (was falsch war), aber zu Demonstrationszwecken habe ich es geändert, bevor ich die Frage hier gepostet habe. Ich dachte, dass das Problem mit der cmd-Datei verbunden war die Ausnahme sagte mir, dass die ganze Zeit ... jetzt, nachdem ich einen korrekten Pfad für die Protokolldatei gab es .. thx jeder