Batch file ausführen

lernen.2007

Erfahrenes Mitglied
Hi Leute,

wenn ich ein BatchFile selber ausführe dann funktioniert es, aber mit der folgendem Code nicht:

Code:
Process myProcess = null;
    try {
        myProcess =  Runtime.getRuntime().exec("C:\\Programme\\Testen\\sprachdatei.bat");
        myProcess.waitFor();
    } catch (IOException e) {
        System.out.println("Exception beim Ausfuehren batch Files " + e.getCause());
    }catch (InterruptedException e) {
        System.out.println("Exception beim Ausfuehren batch Files " + e.getCause());
    }
            
    if(myProcess.exitValue() == 0) {
        System.out.println("Das Programm wurde erfolgreich ausgeführt!");
        return ;
    } else {
        System.out.println("Das Programm ist nicht erfolgreich ausgeführt worden!");
        return;
    }

exitValue ist dann nicht 0 sondern 1. Was kann die Ursache dafür sein?
 
Hi,

wenn ich deinen Quellcode mit einer test.bat ausführe (steht nur nen einfaches echo drin), dann bekomme ich nen exit Code von 0.
Du könntest mal versuchen die .bat so zu starten:

Java:
//...
myProcess =  Runtime.getRuntime().exec("cmd /c C:\\Programme\\Testen\\sprachdatei.bat");
//...

Ansonsten würde ich mal auf einen Fehler in der bat selbst tippen.

Frohes neues Jahr
Daniel
 
Hallo!

Java:
/**
 * 
 */
package de.tutorials;

import java.util.Scanner;

/**
 * @author Tom
 *
 */
public class ScriptFileExecutionExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
        ProcessBuilder processBuilder = new ProcessBuilder("c:/bubu.bat");
        Process process = processBuilder.start();
        Scanner scanner = new Scanner(process.getInputStream());
        while(scanner.hasNextLine()){
            System.out.println(scanner.nextLine());
        }
        scanner.close();
        System.out.println(process.waitFor());
    }

}

bubu.bat:
Code:
C:\>type bubu.bat
@echo off
echo Finished

Ausgabe:
Code:
Finished
0

Wenn das so bei dir nicht klappen sollte solltest du das Skript über den Kommandozeileninterpreter aufrufen:
Java:
ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/C", "c:/bubu.bat");
Gruß Tom
 
Danke ersten mal fürs die Antworten.

Das bat Datei funktioniert, wenn ich doppelklicke aber mit JAVA Code nicht. Die erste Lösung von Laocoon hat nicht funktioniert. ExitValue wars wieder 1.

Thomas:

Die Lösung von dir bringt bei mir Fehler:
Erste Lösung:processBuilder processBuilder = new ProcessBuilder("c:/bubu.bat");
Fehler: The constructor ProcessBuilder(String) is undefined

Zweite Lösung: ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/C", "c:/bubu.bat");

Fehler:The constructor ProcessBuilder(String,String,String) is undefined

Warum das? Ich nutze jdk1.5.0_09
 
Hallo!

ich verwende java version "1.6.0". In meinem Beispiel verwende ich den varargs- Konstruktor des ProcessBuilders (der jedoch auch schon in java 5 existiert):
Java:
    public ProcessBuilder(String... command) {
... um den so nutzen zu können muss der Source-Level in den Java Compiler Settings (in Eclipse) bei JDK Compliance (mindestens) auf -> Compiler Complience Level 5.0 gesetzt werden.

Gruß Tom
 
Danke Thomas wegen den Compiler-Hinweis.

Meine Batchfile befindet sich nicht in workspace Ordner sondern ist irgendwo anders.

z.B. Meine Batchfile ist in C:\Programme\Test\sprachdatei.bat
Meine Workspace ist in D:\JAVA\workspace\*.java

Ich habe in Batchfile einfach das Kommando "mkdir java" angegeben. java Ordner wurde dann in workspace erzeugt, aber nicht in Ordner wo batch Datei liegt.

Wie kann man so machen, dass die Befehle in batch File für die Ordner gedacht sind, wo sich diese Batch file auch befindet?

Danke
Gruß
erkan
 
Hallo!

Ich glaube nur ein cd.. reich nicht... denn dies geht vom aktuellen Working Directory aus und dies ist in diesem Falle das Verzeichnis aus dem der Java launcher gestartet wurde...

Hiermit klappts auf alle Fälle:
Java:
/**
 * 
 */
package de.tutorials;

import java.io.File;
import java.util.Scanner;

/**
 * @author Tom
 *
 */
public class ScriptFileExecutionExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
        File scripFile = new File("c:/bubu.bat");
        ProcessBuilder processBuilder = new ProcessBuilder(scripFile.getAbsolutePath());
        processBuilder.directory(scripFile.getParentFile());
        Process process = processBuilder.start();
        Scanner scanner = new Scanner(process.getInputStream());
        while(scanner.hasNextLine()){
            System.out.println(scanner.nextLine());
        }
        scanner.close();
        System.out.println(process.waitFor());
    }

}

Gruß Tom
 

Neue Beiträge

Zurück