# batch- Datei ausführen



## Gast (2. Feb 2009)

Hallo,

weiß jemand wie man eine batch- Datei aus einem Java- Programm ausführen kann?
Ich weiß, dass es mit der Klasse Runtime geht, hab das auch probiert aber es hat sich die "Dos- Box" nicht geöffnet,

Ich würde nur die Ausführung der batch- Datei benötigen mit ein paar Parameter- Übergaben.

Vielen Dank,
lg


----------



## foobar (2. Feb 2009)

Runtime passt schon:

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#exec(java.lang.String)

Ansonsten poste mal deinen Code.


----------



## didjitalist (2. Feb 2009)

exec( "cmd /c mybatch.bat" );

wenn das nicht reicht, gibs noch paar andere exec methoden, die man mit parametern füttern kann. guck dir die drei in der doc mal an.

aso, das war übrigens für windows. für linux musst du ne shell starten und das script in den input stream stopfen.


----------



## L-ectron-X (2. Feb 2009)

didjitalist hats schon geschrieben, guck dir dazu auch mal die Optionen von cmd.exe (_cmd /?_)an, darin wird aufgeführt, wofür die Optionen gut sind.


----------



## HoaX (2. Feb 2009)

didjitalist hat gesagt.:
			
		

> für linux musst du ne shell starten und das script in den input stream stopfen.


nein - kann man, muss man aber nicht. geht genauso als datei.


----------



## Gast (2. Feb 2009)

<Klugscheiss> 
Wobei du in einer Bash / Shell-Script-Datei immer eine Shell öffnest, wenn sie "direkt ausführbar" ist (z.B. #!/bin/bash)
</Klugscheiss>


----------



## didjitalist (2. Feb 2009)

klappt aber auch nur, wenn die scriptdatei tatsächlich ausführbar ist.


----------



## Guest (10. Feb 2009)

ich hab jetzt folgendes Programm ausgeführt (unten), es wird auch eine ehlendslange Ziffernkombination ausgegeben
(131067589268111107117109101110116101321171101003269......), sonst tut sich aber nichts.

Meine Frage ist jetzt, wie ich es machen kann, das sich die DOS- Box öffnet und dann die Befehle in der batch- Datei ausgeführt wird.


test.bat

```
cd C:
pause
```


```
import java.io.InputStream;

public class JarCreation {

    private final String executeCommand = "cmd /k C:/test.bat";

    public JarCreation() {}

    public void executeTTthreeBatchFile() {
        try {
            Process process =  Runtime.getRuntime().exec(executeCommand);
            InputStream in=process.getInputStream();
            int input;
            while((input=in.read())!=-1){
                System.out.print(input);
                }
            process.waitFor();
            }
        catch (Exception ex) {
            System.out.println("Ausnahme Klasse JarCreation, Methode executeTTthreeBatchFile");
            }
        }
}
```


----------



## Guest (10. Feb 2009)

Weiß jemand was bzw. wie ich das machen kann?
Vielen Dank!!


----------



## Guest (11. Feb 2009)

eine batch- Datei ausführen kann ja nicht so schwer sein, oder, 
weiß wirklich niemand was ich da falsch mache??


----------



## didjitalist (11. Feb 2009)

du liest den input stream nur falsch, das ist alles. #read() liefert ein byte (als int, im bereich 0-255) und du schreibst es dann als int raus, was natürlich eine simple zahl ist. caste nach char, oder korrekter, benutz nen BufferedReader.

eine dos box zu öffnen, ist ne andere frage. weiss ich nicht, wie man das mit cmd hinbekommt.


----------



## Guest (11. Feb 2009)

didjitalist hat gesagt.:
			
		

> eine dos box zu öffnen, ist ne andere frage. weiss ich nicht, wie man das mit cmd hinbekommt.



genau das würd ich benötigen,
mein Programm soll genau das machen, wie wenn ich direkt mit der Maus einen Doppelklick auf die batch- Datei machen würde.
Hat da jemand einen Rat?


----------



## Guest (11. Feb 2009)

Geht das nicht oder hat das noch niemand gemacht oder hab ich die Frage unklar gestellt.
Ich hab schon ziemlich viel gegoogelt aber ich hab nur so ähnliche Beispiele gefunden, welche ich oben angegeben habe.
Wäre sehr dankbar für Hilfe,


----------



## maki (11. Feb 2009)

Vielleciht

cmd /c

Klugscheiss:
Hat aber rein gar nix mit DOS zu tun...


----------



## Guest (11. Feb 2009)

maki hat gesagt.:
			
		

> Vielleciht
> 
> cmd /c
> 
> ...




hab ich probiert, die DOS- Box öffnet sich nicht, wird die Datei trotzdem ausgeführt? und wie könnte ich das überprüfen.
Vielen Dank für die Hilfe,


----------



## thE_29 (11. Feb 2009)

```
Runtime.getRuntime().exec("cmd /c start C:\\testor.bat");
```
In der Bat Datei muss aber ein exit sein oder dgl, sonst bleibts offen!

Bei SuSE Linux Systemen gehts mit konsole -e script.sh.
Aber müsste bei jedem KDE System dann auch gehen..


----------



## Spacerat (12. Feb 2009)

Ich weiss... Ich weiss... hier geht's um das ausführen einer Batch-Datei. Aber weiter oben steht 'ne Beispiel-Datei in welcher eigentlich nur ein Verzeichniswechsel stattfindet. Ist der Weg über die Dos- bzw. Shell-Box nicht ohnehin der falsche, weil der Verzeichniswechsel eben nur in dieser stattfindet und man sich anschliessend wieder in dem selben Verzeichnis wie vorher befindet? Kann es sein, dass sich das aktuelle Verzeichnis auch bei Verwendung der simpleren Methode "exec("test.bat")" nicht ändert? Gibt es in Java überhaupt eine Möglichkeit das aktuelle Verzeichnis während der Laufzeit zu ändern? Nur mal so... nebenbei...

mfg Spacerat


----------



## Ebenius (12. Feb 2009)

ThreadOpener, probier doch mal den kompletten Pfad zu cmd.exe anzugeben, also: 
	
	
	
	





```
Runtime.getRuntime().exec(new String[] {"C:\\WINDOWS\\System32\\cmd.exe", "/K", "C:\\testor.bat" });
```

@Spacerat: In etwa sowas wie das CWD kann man im Java setzen, zum Beispiel mit 
	
	
	
	





```
System.setProperty("user.dir", "C:\\");
```
 ^^ Das ist zwar nicht genau das selbe, aber es geht ─ sagen wir mal meistens ─ ganz gut.  Ich glaube allerdings nicht, dass die Beispiel-Bat-Datei die im Original-Beitrag steht genau so bleiben soll. Sicher will der ThreadOpener dann noch was anderes reinschreiben...

Ebenius


----------



## thE_29 (12. Feb 2009)

exec hat auch einen 3ten Parameter, der sich dir nennt!

dir - the working directory of the subprocess, or null if the subprocess should inherit the working directory of the current process.


----------



## MQue (12. Feb 2009)

Mit  Runtime.getRuntime().exec("cmd /c start C:\\testor.bat"); klappts einwandfrei,
Danke an @the_29


----------

