# cmd öffnen und Befehl übergeben



## beere (28. Nov 2005)

Hallo!

Ich druchsuche schon nun seit Stunden sämtliche Foren und irgendwie komme ich nicht weiter.

Ich habe folgenden Source Code:


```
String cmdBefehl = "cd c:\\xmlimport\\ && xmlbatch test.xml";
Process p =  Runtime.getRuntime().exec("cmd /c" + cmdBefehl);
```

--> xmlbatch ist eine exe-Datei, der als Parameter eine xml-Datei mitgegeben werden muss.

Der cmdBefehl funktioniert, wenn man ihn so in dem commander eingibt.

Was muss ich tun, damit das ganze auch unter Java funktioniert??
Ich bekomme keine Fehlermeldung. Das commander Fenster
öffnet sich kurz und dann ist das Programm auch angeblich schon fertig.

Ich weiß einfach nicht mehr weiter und brauche dringend Hilfe.

Gruß beere


----------



## AlArenal (28. Nov 2005)

Schau mal in Ruhe in deinen Code und verrat mal der Kommdozeile, was sie mit "/ccd c:\\xmlimport\\ && xmlbatch test.xml" anfangen soll


----------



## Oni (28. Nov 2005)

ist nur ne idee habs selbst noch nicht probiert.
vielleicht gibt es probleme weil du kein leerzeichen dazwischen hast.

```
String cmdBefehl = "cd c:\\xmlimport\\ && xmlbatch test.xml";
Process p =  Runtime.getRuntime().exec("cmd /c " + cmdBefehl); // <-- geaendert  nach dem /c ein leerzeichen
```


----------



## beere (28. Nov 2005)

Na damit kann die Kommandozeile nix anfangen, dass stimmt schon.

also müsst ich ja so den Prozess starten:

Process p =  Runtime.getRuntime().exec("cmd cd C:\\xmlimport\\ && xmlbatch bank21_org_kam.xml");

Da passiert jedoch auch nix......*zweifel*


----------



## The_S (28. Nov 2005)

Was soll das &&? Sicher dass das hier ausgeführt werden kann?


----------



## beere (28. Nov 2005)

Ne ein Leerzeichen ist dort schon drin, hatte es nur hier beim posten vergessen *sorry*


----------



## beere (28. Nov 2005)

Yepp, wenn ich den Befehl in der Kommandozeile eingeben, dann wird
die exe gestartet. Durch das && werden der Befehl cd und das starten der exe miteinander
verknüpft.


----------



## The_S (28. Nov 2005)

gut, dann mach ma


```
String cmdBefehl = "start cd c:\\xmlimport\\ && xmlbatch test.xml";
```


----------



## Ilja (28. Nov 2005)

du mußt cd dir und den exec-befehl separieren 

soweit ich weiß, kann man workdir für ecec setzen ...


----------



## beere (28. Nov 2005)

```
String cmdBefehl = "start cd c:\\xmlimport\\ && xmlbatch test.xml";
Process p =  Runtime.getRuntime().exec("cmd /c " + cmdBefehl);
```

Wenn ich das mache, dann bleibt das cmd Fenster offen und nix passiert.



```
String cmdBefehl = "start cd c:\\xmlimport\\ && xmlbatch test.xml";
Process p =  Runtime.getRuntime().exec("cmd " + cmdBefehl);
```


Und so passiert wieder rein gar nix...also Fenster blinkt kurz auf, aber die
xmlbatch.exe wird nicht gestartet.


----------



## The_S (28. Nov 2005)

Für was benötigst du das &&? Sry, hab ich noch nie auf ner Windows-Konsole (sprich CMD) gesehen. Was macht &&?


----------



## beere (28. Nov 2005)

Ilja hat gesagt.:
			
		

> du mußt cd dir und den exec-befehl separieren
> 
> soweit ich weiß, kann man workdir für ecec setzen ...




Was muss ich separieren?? Der Befehl funktioniert doch so im cmd......
Dachte man kann den cmd starten und dann direkt den Befehl mit übergeben


----------



## beere (28. Nov 2005)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Für was benötigst du das &&? Sry, hab ich noch nie auf ner Windows-Konsole (sprich CMD) gesehen. Was macht &&?




Also wenn ich die console starte, dann befinde ich mich ja irgendwo.

Dann wechsel ich in das verzeichnis xmlimport unter c:

befinde ich mich in dem verzeichnis rufe ich xmlbatch auf und sag ihm er
soll die xml-datei mit dem programm bearbeiten.


----------



## KSG9|sebastian (28. Nov 2005)

```
Process p =  Runtime.getRuntime().exec("cmd /c c:\\xmlimport\\xmlbatch.bat test.xml");
```


----------



## The_S (28. Nov 2005)

Jo, war mir schon klar. Nur was macht das && speziell?

Würde net auch ein


```
C:\pfad\zur\datei\datei.exe parameter
```

in der Konsole genügen?


----------



## beere (28. Nov 2005)

KSG9|sebastian hat gesagt.:
			
		

> ```
> Process p =  Runtime.getRuntime().exec("cmd /c c:\\xmlimport\\xmlbatch.bat test.xml");
> ```




xmlbatch ist eine exe und keine batch Datei .... so habe ich es schon ausprobiert.

Aber es öffnet sich immer nur kurz das Konsolenfenster und
die exe wird nicht ausgeführt.

Laut ReadMe von xmlbatch muss jedoch keine Dateierweiterung angeben 
werden.


----------



## beere (28. Nov 2005)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Jo, war mir schon klar. Nur was macht das && speziell?
> 
> Würde net auch ein
> 
> ...



Ja genau das habe ich auch schon probiert.....aber es will einfach nicht :-(

in der Konsole klappt jeder befehl, sofern ich ihn per Hand eingebe
aber unter java will es einfach nicht klappen.


----------



## The_S (28. Nov 2005)

[edit] Hab den ganzen Post ma editiert 

[edit2] statt .bat .exe


```
Process p =  Runtime.getRuntime().exec("cmd /c start c:\\xmlimport\\xmlbatch.exe test.xml");
```

oder


```
Process p =  Runtime.getRuntime().exec("cmd /c start \"\" c:\\xmlimport\\xmlbatch.exe test.xml");
```

oder


```
Process p =  Runtime.getRuntime().exec("cmd /c start \"\" \"c:\\xmlimport\\xmlbatch.exe test.xml\"");
```

oder


```
Process p =  Runtime.getRuntime().exec("cmd /c start \"c:\\xmlimport\\xmlbatch.exe test.xml\"");
```

oder


```
Process p =  Runtime.getRuntime().exec("cmd /c start \"\" \"c:\\xmlimport\\xmlbatch.exe\" test.xml");
```

oder


```
Process p =  Runtime.getRuntime().exec("cmd /c start \"c:\\xmlimport\\xmlbatch.exe\" test.xml");
```

Eins von denen geht! Ich weiß nur net genau wie das mit der Parameterübergabe funktioniert, deswegen mal ein paar "Ratebeispiele" . In Anführungszeichen setzen musste des wenn Leerzeichen enthalten sind. Die Anfänglichen "" braucht man eignetlich nur bei Ordnern, aber wie gesagt => Parameter kA wie die Syntax genau aussehen muss


----------



## beere (28. Nov 2005)

Okay so funktioniert es nicht.

c:\xml_import\xmlbatch.exe test.xml


es muss erst in das verzeichnis xmlimport gewechselt
und dann
xmlbatch test.xml ausgeführt werden.


----------



## beere (28. Nov 2005)

Aber wie gesagt der cmdBefehl funktioniert ja, sofern ich ihn per Hand in 
die Konsole eintippe.

Er funktioniert nur nicht, wenn ich die Konsole mit Java aufrufe.

Process p =  Runtime.getRuntime().exec("cmd /c dir" );

Wenn ich diese CodeZeile habe, wofür steht dann das /c ??
das habe ich nirgendwo erklärt gefunden.


----------



## The_S (28. Nov 2005)

Irgendwie wird hier alles sehr wirr ... Hast du meinen edit im letzen Post beachtet?


----------



## Ilja (28. Nov 2005)

such im forum nach exec
es ist käse, was ihr da macht!

du mußt in java nicht "cd" benutzen... es gibt dazu eine methode, die das arbeitsverzeichnis angibt!

dann müsstest du nur noch "deine.exe parameter" aufrufen!


----------



## beere (28. Nov 2005)

Das Arbeitsverzeichnis bringt mir nix, ich muss direkt in das Verzeichnis
gehen und in diesem Verzeichnis nicht die exe starten sondern nur
den Befehl aufrufen.

Also kann ich nicht den cmd starten und den Befehl
mit übergeben, also so wie ich ihn per Hand im cmd eingeben ?!

Dann muss ich das anders lösen.

Ich habe schon alle Beiträge zu exec gelesen und nix gefunden.


----------



## beere (28. Nov 2005)

@Hobbit

Ja deinen letzten Post habe ich gesehen....die meisten
Sachen habe ich schon probiert, aber ich versuche es einfach
mal weiter.

Also wie gesagt es müssen zwei Befehle sein.
Erst in das verzeichnis wechseln und dann die xmlbatch aufrufen.


----------



## The_S (28. Nov 2005)

Irgendwie scheinst du da ganz gewaltig zu pfuschen oder oder dein Fehler liegt irgendwo anders. Hab mir gerade mal (weil dein Prob für mich langsam net mehr nachvollziehbar wird) ne Test-Applikation geschrieben:


```
import java.io.*;

public class ExecTest {
	
	public static void main(String[] args) {
		
		try {
			Runtime.getRuntime().exec("cmd /c start C:\\WINNT\\NOTEPAD.EXE C:\\WINNT\\ntbtlog.txt");
		}
		catch (IOException e) {
			e.printStackTrace();
		}
	}
}
```

Und dieser Code öffnet ohne Probleme NOTEPAD.EXE in C:\WINNT und übergibt ihm die Datei ntbtlog.txt im Verzeichnis C:\WINNT als Parameter. => Notepad wird mitsamt ntbtlog.txt geöffnet.

Und jetzt kommst du


----------



## mischer (28. Nov 2005)

Hi,

hast du es schonmal mit Runtime.exec(String[] cmdarray); versucht?

Du knallst ihm einfach beide Befehle nacheinander hin.

Meiner Mainung nach sollte aber auch Runtime.exec.(String command, String[] envp, File dir); funtionieren. Du gibst ihm einfach in dir das Verzeichnis an in dem er das ausführen soll.


----------



## Ilja (28. Nov 2005)

mischer trifft den nagel auf den kopf 

@hobbit

&& ist ein befehlseparator unter dos (wobei ein einfaches & reicht!!!)

cd bla & my.exe param
führt zuerst cd bla aus
und dann my.exe param

die frage ist, ob java das so unterstützt... zu dumm, dass ich das hier nicht selbst ausprobieren kann... (firmenrechner!)


----------



## The_S (28. Nov 2005)

Ilja hat gesagt.:
			
		

> mischer trifft den nagel auf den kopf
> 
> @hobbit
> 
> ...



Ah, danke. Aber in diesem Fall müsste wohl auch der vollständige Dateipfad vor der exe reichen. Damit könnte er auf && verzichten und es ist wurst ob Java das unterstützt . Wenn ich mal Zeit hab probier ichs kurz aus.


----------



## beere (28. Nov 2005)

Also entweder ich bin zu doof oder dieses sch** xmlbatch programm
hat ne große Macke........krieg zu viel.

Also mit dem winnt das funktioniert bei mir auch super.

Aber irgendwie klappt des mit dem anderen exec Befehl auch nicht.

Zumindestens sagt er mir immer, das er die Datei nicht findet.


----------



## Ilja (28. Nov 2005)

das problem ist, dass die *.xml auch dann einen absoluten pfad braucht!

generäll sollte man nicht mit absoluten pfaden arbeiten (oder diese in eine externe *.cfg/ini packen)


----------



## thE_29 (28. Nov 2005)

Das zB geht bei mir


```
try{
      Runtime.getRuntime().exec("cmd /c c: & cd C:\\JNI\\ImageTool\\Debug & ImageTool.exe");
    }
    catch(Exception ex)
    {
      ex.printStackTrace();
    }
```

Er wechselt ins Verzeichnis und führt die exe aus!

Schonmal dran gedacht das der gar nicht auf C: die Konsole startet und somit der cd Befehl gar net klappt??


----------



## beere (28. Nov 2005)

ich weiß, dass man nicht mit absoluten Pfäden arbeitet, aber in diesem Fall ist es notwendig!
Da die xml Dateien vorher von mir dorthin geschreiben werden.

Aber auch mit fester Pfadangabe passiert nix.


----------



## The_S (28. Nov 2005)

Poste doch bitte mal folgendes:

- deinen jetztigen genauen Aufruf
- position der xml datei
- position der exe
- sonstiges in deinen Augen relevantes 

[edit] hat sich wohl erledigt


----------



## beere (28. Nov 2005)

@the_29: Du bist genial DANKE ...... es  klappt.... *absolutmegafreu*

Jetzt kann ich auch endlich eine rauchen gehen ..... du hast mir echt den "popo" gerettet.

DANKE!!!!!!!!



oder doch nicht, also irgendwie läuft es schon aber nicht so wie sonst.....ich lass es erstmal in ruhe laufen...

@Hobbit

Aufruf:

Process p =  Runtime.getRuntime().exec("cmd /c c: & cd C:\\xmlimport\\ & xmlbatch test.xml");

Ort von xmlbatch.exe: C:\xmlimport

Ort von test.xml: C:\xmlimport

Ausführen von xmlbatch.exe durch Eingabe von "xmlbatch test.xml" in die Konsole


----------



## thE_29 (28. Nov 2005)

Hrhr....

Wusst ichs doch das dort der Fehler war :bae:


----------



## beere (28. Nov 2005)

Doch funktioniert alles !! Super


----------



## Ilja (28. Nov 2005)

omg.... war das java-programm auf nem anderen laufwerk? 


RRROOOOOOOOFLFLFLFL


----------



## beere (28. Nov 2005)

Ja das ist bei uns alles komplizierter, dacht eigentlich er würde dann den cmd
auf c starten, aber hat er wohl nicht getan......

Also Dankeschön an alle.....hab ja jetzt einiges gelernt   :toll:


----------

