Leerzeichen im Pfad

  • Themenstarter Themenstarter Olli123
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
O

Olli123

Gast
Hallo,

ich rufe in einem Java-Servlet eine Batchdatei:

Code:
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("D:\\Tomcat 5.0\\webapps\\Watchcat\\getTotalSize.cmd");

Leider funktioniert der Aufruf hier nicht, was wohl an dem Leerzeichen liegt.
Denn folgendes funktioniert sehr gut:

Code:
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("D:\\Test\\getTotalSize.cmd");

Hat jemand eine Idee, wie ich das Problem mit dem Leerzeichen löse?
Die Batchdatei soll auf jeden Fall in das Verzeichnis "Tomcat 5.0"

Danke im Voraus!
Olli
 
verwende extra Anführungszeichen für das Verzeichnis mit dem Leerzeichen oder den gesamten Pfad:


Process pr = rt.exec("D:\\\"Tomcat 5.0\"\\webapps\\Watchcat\\getTotalSize.cmd");

Process pr = rt.exec("\"D:\\Tomcat 5.0\\webapps\\Watchcat\\getTotalSize.cmd\"");
 
Danke an euch beide!
Die zweite Version funktioniert^^:
Process pr = rt.exec("\"D:\\Tomcat 5.0\\webapps\\Watchcat\\getTotalSize.cmd\"");

Nun einen schritt weiter!
Der Pfad wird quasi berechnet und in einem String gespeichert. Dann sieht der Aufruf wie folgt aus:

Code:
String device = "c"; // Laufwerk, dass untersucht werden soll
String ausfuehrungsPfad = "D:\\Tomcat 5.0\\webapps\\watchcat\\";
pr = rt.exec("\"" + ausfuehrungsPfad + "getTotalSize.cmd " + device + "\"");

Dann kommt folgender Fehler:
java.io.IOException: Cannot run program ""D:\\Tomcat":
CreateProcess error=2, Das System kann die angegebene Datei nicht finden

Er schneidet also wieder nach ab dem Leerzeichen ab. Klappt die Stringverkettung an dieser Stelle nicht?
Sonst ist der Aufruf doch identisch ???:L
 
ja wie jetzt, ist der Aufruf nun identisch oder nicht?
vergleiche die beiden Strings mit equals, gib sie untereinander aus
 
SlaterB hat gesagt.:
ja wie jetzt, ist der Aufruf nun identisch oder nicht?
vergleiche die beiden Strings mit equals, gib sie untereinander aus

die Strings sind fast gleich. Oben hatte ich beim Test noch das device rausgelassen.

Code:
pr = rt.exec("\"" + ausfuehrungsPfad + "getTotalSize.cmd\"");

so klappt es^^

Code:
pr = rt.exec("\"" + ausfuehrungsPfad + "getTotalSize.cmd " + device + "\"");
pr = rt.exec("\"" + ausfuehrungsPfad + "getTotalSize.cmd c\"");

so wird bei beiden ab dem Leerzeichen abgeschnitten^^
Leider brauche ich den Parameter "device" bzw. "c" oder "d" ungedingt!
 
Ich hab es endlich raus! 😀

Code:
pr = rt.exec("\"" + ausfuehrungsPfad + "getTotalSize.cmd\" " + device + "\"\"");

So funzt es.... man ist das alles umständlich :?
Kann also geschlossen werden der Thread!

Danke SlaterB!
 
geh weg mit diesen schrecklichen x +y+ z

"D:\\Tomcat 5.0\\webapps\\Watchcat\\getTotalSize.cmd"
ist also ein korrekt eingeanführungszeichneter Pfad,

wenn du nun

"D:\\Tomcat 5.0\\webapps\\Watchcat\\getTotalSize.cmd Parameter"

schreibst, dann beziehen sich die Anführungszeichen auf das gesamte Kommando, nicht mehr auf den Pfad (werden wahrscheinlich ignoriert)

es muss also
"D:\\Tomcat 5.0\\webapps\\Watchcat\\getTotalSize.cmd" Parameter

heißen, in Jave übersetzt

Process pr = rt.exec("\"D:\\Tomcat 5.0\\webapps\\Watchcat\\getTotalSize.cmd\" Parameter");
 
OK... danke! Gute Erläuterung 😀
Jetzt ist mir auch deutlich klarer, warum es so nun funktioniert.

Einige \" gespart :wink:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben