# Befehl an CMD übergeben



## -horn- (26. Aug 2010)

moien da bin ich wieder .

ich würde gerne befehle aus dem javaprogramm an die cmd umgebung übergeben und am liebsten auch die antworten wieder einlesen lassen.
das ganze soll zwar auf linux befele übergeben, aber da ich das auf windows und netbeans mache würde ich zur überprüfung das auch hier testen ohne jedes mal das OS zu wechseln.

so, ein kumpel hat mir was gezeigt, das auch hierrauf basiert
Running system commands in Java applications | java exec example | devdaily.com
und es soll auf linux gehen. wenn ich aber den befehl auf "dir" ändere, um das aktuelle verzeichnis einzulesen, dann gibt es fehlermeldungen.
wenn ich als neuen test "notepad test.txt" ausführe, dann klappt es und notepad öffnet sich mit leerer seite undfragt mich, wohin ich die nicht gefundene, neue datei speichern möchte.

ich würde jetzt gerne wissen, warum der eineeinfache cmd befehl nicht geht, aber das zweite schon?

grüße,

Andreas


----------



## XHelp (26. Aug 2010)

Versuch es mit 
	
	
	
	





```
cmd.exe /C dir
```


----------



## -horn- (26. Aug 2010)

moien,

hey cool, funktioniert! es geht auch ohne .exe, aber wofür stehtdas /C ist das für den laufwerkspuchstaben, wo cmd.exe ist, oder eine option?

Andreas


----------



## XHelp (26. Aug 2010)

gib in deiner Konsole 
	
	
	
	





```
cmd /?
```
 ein, da stehen die ganzen Parameter:


> CMD ... [[/code] Zeichenfolge]
> /C      Führt den Befehl in der Zeichenfolge aus und endet dann.


----------



## Eldorado (26. Aug 2010)

Let me google that for you
Ich denke, du wirst genug Erklärungen finden


----------



## -horn- (26. Aug 2010)

moien,

okay, schonmal danke euch.
jetzt muss ich nur noch herausfinden, wie ich mehrere zeilen befehle übergeben kann . hoffentlich steht das auch irgendwo bei google


----------



## XHelp (26. Aug 2010)

mehrere Zeilen Befehle?


----------



## Eldorado (26. Aug 2010)

Nur mal so eine Idee: Du könntest das ganze als batch-Datei speichern und diese dann ausführen. ich weiß nicht, wie dabei die beste Vorgehensweise ist, war wie gesagt jetzt einfach mal eine Idee.


----------



## -horn- (26. Aug 2010)

moien,

ich muss daten, die ich genriere, an unseren boinc-server (hier geht's zum projekt http://www.java-forum.org/jobboerse/104150-dc-projekt-constellation-aufruf-teilnahme.html ) übergeben und das sind mehrere befehle.

aber ich könnte das auch mit "COMMAND1 & COMMAND2 & COMMAND3 & EXIT" machen.

grüße,

Andreas


----------



## XHelp (26. Aug 2010)

Du hast ja weiter oben was von Linux erzählt. Macht es nicht mehr Sinn SSH Verbindung aufzubauen?


----------



## -horn- (26. Aug 2010)

moien,

ich bin ja "leider" kein linuxkind und muss meinem javaprogramm das hier an linuxübergeben lassen

#! /bin/sh
cp download/input `bin/dir_hier_path input`
cp download/input2 `bin/dir_hier_path input2`

bin/create_work -appname worker -wu_name worker_nodelete \
-wu_template templates/worker_wu \
-result_template templates/worker_result \
input input2

WrapperApp - BOINC - Trac

Andreas


----------



## XHelp (26. Aug 2010)

Wie gesagt, schau dir an wie SSH mit java funktioniert. Meiner Meinung nach ist es einfacher.


----------



## -horn- (6. Okt 2010)

moien,

ich habe mal einfrage zu einem copy befehl unter linux.


```
p = Runtime.getRuntime().exec("cp "+FileList[1]+" `"+INPUT_DIR1+"bin/dir_hier_path "+FileList[1]+"`");
```

wenn ich das ausgeben lasse, dann kriege ich als fehlermeldung einen hinweis, dass meine datei, die ich eigentlich kopieren wollte, kein ordner sei.
das verstehe ich nicht, ich weiss, dass es eine datei ist, und genau die will ich kopieren lassen.

ich weiss nun nicht, ob ich was übersehe, oder was ganz anderes reinspielt. denn ich hatte es schonmal benutzt mit diesem befehl und es ging, aber es war keine zips. die zips habe ich kurz vor diesem befehl erstellen lassen und ich meine, dass der stream bereits zu sein muss. aber ich habe das gefühl, dass die dateien wärend der java-ausführung noch schreibgeschützt sind. aber nachher kann ich die löschen, also ihr seht, ich bin verwirrt.

gibt es vielleicht etwas wichtiges zu beachten, oder gibt es eine andere möglichkeit cmds zu übergeben?

Andreas


----------



## Gast2 (6. Okt 2010)

-horn- hat gesagt.:


> gibt es vielleicht etwas wichtiges zu beachten



Ja, als erstes immer den vollen Befehl wegloggen sobald er aus mehren String zusammengebaut wird:


```
String command = "cp "+FileList[1]+" `"+INPUT_DIR1+"bin/dir_hier_path "+FileList[1]+"`";
log.debug(command); oder System.out.println(command) oder was auch immer
p = Runtime.getRuntime().exec(command);
```

Dann sag mal was dabei raus kommt und was passiert wenn du genau diesen Befehl per SSH in einem Terminal ausführst. Wichtig ist ja auch in welchen Verzeichnis du grade bist wenn du relativ adressierst


----------



## -horn- (6. Okt 2010)

moien fassy,

der command wird richtig ausgegeben, wenn man das per System.out.println() macht, das hatte ich schon gemacht weil ich dachte, der vergisst einen anteil des strings.
mit debug habe ich noch nicht gearbeitet, bringt das mehr infos? dann probiere ich das aus.

mit "ssh" müsstest du mir helfen, was genau du meinst, und wie das geht.

Andreas


----------



## xjCoder (7. Okt 2010)

Hi,

also wenn ich Deinen cp-Befehl richtig lese, 



-horn- hat gesagt.:


> ```
> p = Runtime.getRuntime().exec("cp "+FileList[1]+" `"+INPUT_DIR1+"bin/dir_hier_path "+FileList[1]+"`");
> ```



dann fehlt dem Aufruf doch ein Separator 
	
	
	
	





```
+INPUT_DIR1+"bin/dir_hier_path[COLOR="Red"]/[/COLOR]"+FileList[1]+
```
.

Und dann noch eine Frage dazu: Warum hast Du die 
	
	
	
	





```
" `"
```
 in Deinem Befehl?


----------

