# exec der cmd mit parametern



## iNstinct (28. Juni 2007)

Hi Leute,

Ich brauch Hilfe bei einem kleinerem Problem. Ich will über mein Java Programm die cmd.exe aufrufen. Das ist aber leider nicht alles.
In der cmd soll dann auf einen anderen Ordner verwiesen und in diesem eine exe mit Parametern aufgerufen werden.

Momentan sieht mein Quelltext wie folgt aus:


```
public void execute() throws Exception{
     Runtime rt = Runtime.getRuntime();
     rt.exec("cmd.exe "+properties.getProperty("XXX")+"XXX.exe -x XXX -y "+YYY);
}
```

So wird die exe aber nicht aufgerufen.

Ich hoffe mal, dass mir einer von euch helfen kann.
Vielen Dank schonmal im Vorraus


----------



## MeinerEiner_80 (28. Juni 2007)

Moin!
Mal ein Beispiel um Wordpad mit einer textDatei aus der konsole aufzurufen:

```
Runtime.getRuntime().exec( "cmd /c start /B c:/windows/system32/write.exe c:/tables.txt" );
```
Musst jetzt eigentlich nur noch deinen Bedürfnissen ein wenig anpassen...
*grüssle*
MeinerEiner


----------



## KlaDi (28. Juni 2007)

Hallo,

auf den ersten Blick sieht Dein Aufruf eigentlich richtig aus.
Kann es sein, das der Pfad zur .exe Leerzeichen enthält?
Grundsätzlich würde ich es so machen um das Problem mit den Leerzeichen im Pfad zu umgehen:

```
public void execute() throws Exception{
     Runtime rt = Runtime.getRuntime();
     rt.exec("cmd \""+properties.getProperty("XXX")+"XXX.exe\" -x XXX -y "+YYY);
}
```

gruß klaus.

[EDIT]Vielleicht fehlt auch in Deinem Pfad ein / vor der XXX.exe?


----------



## Anime-Otaku (28. Juni 2007)

Warum so umständlich?

Einfach ein String[] mit den verschiedenen Argumenten übergeben. Dadurch wird auch gesorgt, dass man sich um Leerzeichen und andere Zeichen nicht kümmern muss. Bei dem neueren Processbuilder geht das glaube ich nur mit String[].


----------



## iNstinct (28. Juni 2007)

Alle Änderungen konnten nicht ausgeführt werden. Auch wenn ich die exe mit Parametern (ohne cmd davor) aufrufe passiert nicht.

Der Pfad in der properties endet mit / also dürfte da auch kein problem entstehen.
:/

//EDIT:

Auch die String[] Methode geht nicht. 


```
String[] para = {properties.getProperty("XXX)+"\\XXX.exe","-x","XXX","-y",YYY};
rt.exec(para);
```


----------



## Anime-Otaku (28. Juni 2007)

iNstinct hat gesagt.:


> Alle Änderungen konnten nicht ausgeführt werden. Auch wenn ich die exe mit Parametern (ohne cmd davor) aufrufe passiert nicht.
> 
> Der Pfad in der properties endet mit / also dürfte da auch kein problem entstehen.
> :/
> ...



Du solltest auch cmd.exe mitgeben...woher soll er sonst wissen was er aufrufen soll?
Wenn der Pfad mit einem / endet...entschuldigung aber unter Windows verwenden wir \ also \\


```
String[] para = {"cmd.exe",properties.getProperty("XXX)+"\\XXX.exe","-x","XXX","-y",YYY};
rt.exec(para);
```


----------



## KlaDi (28. Juni 2007)

Ähm / wird von von Java als \\ interpretiert..also das sollte kein Problem darstellen.


----------



## iNstinct (28. Juni 2007)

Die / werden zwar automatisch zu \ aber egal.

Das kam beim Stringarray raus:
cmd.exeD:\**\**\**\XXX.exe-xXXX-yY

Sollten da nich Leerzeichen rein?

Selbst mit Leerzeichen funktioniert dieser Aufruf nicht!


----------



## zerix (28. Juni 2007)

Hallo,

normal sollte es funktionieren, wenn du statt "cmd.exe" nur "cmd" angibst, dann brauchst du auch keinen Pfad mit anzugeben.
Wo sollten Leerzeichen sein?

MFG

zEriX


----------



## KlaDi (28. Juni 2007)

Hallo,

ja auf jeden Fall müssen da Leerzeichen rein.
Die wirst Du aber wohl per Hand dann einfügen müssen.
Also:

```
String[] para = {"cmd ",properties.getProperty("XXX)+"\\XXX.exe ","-x ","XXX ","-y ",YYY};rt.exec(para);
```

gruß klaus.


----------



## iNstinct (28. Juni 2007)

Leider schon alles ohne Erfolg getestet.

@zerix:
Der Pfad ist für das Programm, welches ich in der cmd aufrufen will, also brauch ich den.


----------



## KlaDi (28. Juni 2007)

Hmm,

hast Du es mal so probiert:
	
	
	



```
public void execute() throws Exception{
     Runtime rt = Runtime.getRuntime();
     rt.exec("cmd \""+properties.getProperty("XXX")+"XXX.exe -x XXX -y "+YYY + "\"");
}
```

Eventuell muss der Pfad und die Paramter zusammengefasst werden, da war ich mir vorhin nicht so sicher.

gruß klaus.


----------



## iNstinct (28. Juni 2007)

Ja, hab ich auch schon

Ich habe gerade nochmal manuell ausgeführt und habe gemerkt, dass in der cfg Datei auch der Absolute Pfad stehen muss, oder ich übergebe die Einstellungen via Parameter. Ich setz mich damit mal ein wenig auseinander, aber auf jedenfall Danke an euch.

Wenn ich nicht weiterkomme, dann melde ich mich

Also, ich habe jetzt herausgefunden, wie es in der cmd geht (der Aufruf geht in Java aber nicht):


```
D:\test\tool\testtool\tool.exe -f D:\test\tool\testtool\main_merge.cfg -l D:\test\tool\testtool\bin.mpl -l2 D:\test\tool\testtool\grey.mpl -o D:\
```

In Java dann so:


```
cmd D:\test\tool\testtool\tool.exe -f D:\test\tool\testtool\main_merge.cfg -l D:\test\tool\testtool\bin.mpl -l2 D:\test\tool\testtool\grey.mpl -o D:\
```



//EDIT:

Mit einer Mischung aus allen Lösungsvorschlägen habe ich es nun endlich geschaft! Anbei der Quelltext zur Hilfe Anderer.


```
cmd /c start /B D:\test\tool\testtool\tool.exe -f D:\test\tool\testtool\main_merge.cfg -l D:\test\tool\testtool\bin.mpl -l2 D:\test\tool\testtool\grey.mpl -o D:\
```


----------

