CMD Befehl + Variable im Java-Code ausführen

chewee

Mitglied
Bitte entschuldigt falls ich in der falschen Sektion bin... das liegt aber daran das ich wirklich ein Anfänger bin.

Ich bin dabei mir ein kleines Programm zu schreiben. In diesem gebe ich eine Zahl ein und diese Zahl soll im Java Code als CMD Befehl ausgeführt werden.

Ich habe rausgefunden wie ich ein Befehl ausführen kann. Das klappt auch, aber nur wenn ich den ganzen Befehl im Code habe.

Hier mal ein Ausschnitt vom Code:

Java:
ProcessBuilder builder = new ProcessBuilder( "cmd", "/c","shutdown /r /t Variable");
						try {
							Process r = builder.start();
						}
						catch (IOException e) {
							e.printStackTrace();
						}


Wie im Code zu sehen ist der Befehl in den Anführungszeichen... Und ich kriege es einfach nicht hin das die Eingabe vom TextField da an den Befehl anzuhängen..

Falls ihr noch weiter Infos braucht einfach fragen.
 
Zuletzt bearbeitet:
Moin,

Ja genau das hab ich versucht...
Aber ja das meine ich...
Wie hast Du es denn genau geschrieben?
So wie Gucky:
Java:
"dein Befehl" + textField.getText()
oder doch eher
Java:
"dein Befehl + textField.getText()"
???:L

Oder was genau ist jetzt dein Problem ???:L

Gruß
Klaus
 
Bitte entschuldigt falls ich in der falschen Sektion bin... das liegt aber daran das ich wirklich ein Anfänger bin.

Ich bin dabei mir ein kleines Programm zu schreiben. In diesem gebe ich eine Zahl ein und diese Zahl soll im Java Code als CMD Befehl ausgeführt werden.

Ich habe rausgefunden wie ich ein Befehl ausführen kann. Das klappt auch, aber nur wenn ich den ganzen Befehl im Code habe.

Hier mal ein Ausschnitt vom Code:

Java:
ProcessBuilder builder = new ProcessBuilder( "cmd", "/c","shutdown /r /t Variable");
						try {
							Process r = builder.start();
						}
						catch (IOException e) {
							e.printStackTrace();
						}


Wie im Code zu sehen ist der Befehl in den Anführungszeichen... Und ich kriege es einfach nicht hin das die Eingabe vom TextField da an den Befehl anzuhängen..

Falls ihr noch weiter Infos braucht einfach fragen.

Ich glaube du verwendest den ProcessBuilder falsch. Ich habe mal in einer Unix-Umgebung damit gearbeitet und gerade ein paar Snippets ausgekramt. Ich vermute, du musst nicht spefisch angeben, dass du in der CMD-arbeiten willst. Ebensowenig übergibst du dem Konstruktor den Pfad in dem der Befehl ausgeführt werden soll. Das erste Argument des Konstruktors ist der Befehl, das zweite die Optionen und das dritte das Argument. Den Ausführungspfad gibst du mit der Methode
Code:
directory(File)
an.

Ein Codebeispiel:
Java:
ProcessBuilder builder = new ProcessBuilder("shutdown", "-r -t", deineVaraible); 		    
builder.directory( new File("C:") ); 
builder.start();
 
Ich glaube du verwendest den ProcessBuilder falsch...

Java:
ProcessBuilder builder = new ProcessBuilder("shutdown", "-r -t", deineVaraible); 		    
builder.directory( new File("C:") ); 
builder.start();

Ich habe mal den teil versucht ("shutdown", "-r -t", deineVaraible)
hat leider auch nicht funktioniert...
Ich versteh bei deinem Vorschlag das new File("C:") nicht?

Es soll ja die Zahl aus dem TextField, die vom User eingegeben wird, an den Befehl angehangen werden.
 
Zuletzt bearbeitet:
mal ganz davon abgesehen das man java zu so einem SCHE!ß nicht missbraucht ... und das man unter windows in der regel "/" statt "-" als marker für eine option nutzt ... bin ich EXTREM davon begeistert wie hier versucht wird rum zu basteln und wie sehr sich alle mit übergabeparametern auskennen ...


mal zur verdeutlichung : ein terminal ... egal ob ne BASH unter unix oder CMD unter windows ... haben das leerzeichen " " als trenner für einzelne parameter ... und quotes \" als gruppen-marker


daraus folgt

wenn das grund commando z.b.

shutdown /r /f /t 120

sein soll ... dann sind das genau 4 parameter die alle einzeln verarbeitet werden


ergo

new ProcessBuilder( "cmd", "/c","shutdown /r /t Variable");

wäre soweit richtig ... wenn man es richtig schreiben würde

new ProcessBuilder( "cmd", "/c", "shutdown /r /t "+variable);

damit callt man die anwendung ... in dem fall CMD.exe ... und übergibt 2 parameter :

/c
shutdown /r /t variable

CMD ist nun selbst dran den zweiten parameter nach leerzeichen zu splitten und weiter zu verarbeiten


weiter

@VfL
berechtigte nachfrage ...


nächster

new ProcessBuilder("shutdown", "-r -t", deineVaraible);

DAS kann doch schon gar nicht mehr richtig sein
1) wie gesagt : unter windows wird "/" genutzt ... nicht "-" ... höchstens bei von unix portierten programmen oder weil die programmierer langeweile hatten
2) auch du übergibst hier wieder zwei parameter ... die aber so völlig falsch sind

-r -t
variable

in diesem fall wird "-r -t" als EIN parameter übgeben ... was folgenden aufruf gleicht

shutdown "-r -t" time

und DAS kann shutdown nicht verarbeiten da es keinen parameter "-r -t" gibt ...


korreterweise sieht es WENN dann also so aus

new ProcessBuilder("shutdown", "/r", "/t", variable);

um halt 3 parameter zu übergeben ... nämlich

/r
/t
120

genau so wie sie shutdown auch erwartet




mal am beispiel java und main(String[])

was glaubt ihr wohl was in String[] stehen würde bei folgenden aufrufen

java App "1 2 3" 4
java App 1 "2 3" 4
java App 1 2 3 4

so .. und jetzt wendet das mal auf das allem zugrundeliegende C und dessen main()-funktion an ... dann erkennt man : es macht halt DOCH einen unterschied wie und vor allem wie viele parameter man übergibt ...

das hat nichts mit CMD zu tun ... sondern einfach damit wie parameter erwartet werden und übergeben werden müssen
 

Zurück
Oben