# Leerzeichen im Pfad



## Olli123 (20. Mrz 2008)

Hallo,

ich rufe in einem Java-Servlet eine Batchdatei:


```
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:


```
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


----------



## The_S (20. Mrz 2008)

evtl. Anführungszeichen außenrum!?


----------



## SlaterB (20. Mrz 2008)

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\"");


----------



## Guest (20. Mrz 2008)

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:


```
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


----------



## SlaterB (20. Mrz 2008)

ja wie jetzt, ist der Aufruf nun identisch oder nicht?
vergleiche die beiden Strings mit equals, gib sie untereinander aus


----------



## Guest (20. Mrz 2008)

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.


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

so klappt es^^


```
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!


----------



## Olli123 (20. Mrz 2008)

Ich hab es endlich raus!   


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

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

Danke SlaterB!


----------



## SlaterB (20. Mrz 2008)

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");


----------



## Olli123 (20. Mrz 2008)

OK... danke! Gute Erläuterung   
Jetzt ist mir auch deutlich klarer, warum es so nun funktioniert. 

Einige \" gespart  :wink:


----------

