ovu-p86
Goto Top

Bat Parameter mit Leerzeichen beim Aufruf übergeben

Hallo,

beim Aufruf einer .Bat (vmstart.bat) will ich einen Parameter mit Leerzeichen übergeben.
vmstart.bat Dateiname.
Es handelt sich um eine Bat bei der zunächst verschiedene Dienste aktiviert, dann eine VM aufgerufen
und anschliessend die Dienste wieder deaktiviert werden.
Hab auch alle Variationen mit "" probiert. Haut nicht hin.
BEISPIEL:

Aufruf:
vmstart.bat E:\virtuell\dat\server\Windows Server 2008.vmx

vmstart.bat:
start /WAIT "" %1


Funktioniert nicht. VM wird nicht aufgerufen. Bei .vmx ohne Leerzeichen klappts.
Was mache ich falsch?

Habs jetzt so gelöst:
start /WAIT "" "%1 %2 %3 %4 %5 %6 %7 %8 %9"

Dann funktionierts. Aber das ist ja keine ordentliche Lösung.
Was ist wenn mehr als 9 Leerzeichen drin sind?
Was ist, wenn ich einen 2. Parameter übergeben will?


Frage: Wie kann ich beim Aufruf einer .Bat einen Parameter mit Leerzeichen übergeben


Gruß
Uwe

Content-Key: 164295

Url: https://administrator.de/contentid/164295

Ausgedruckt am: 28.03.2024 um 09:03 Uhr

Mitglied: bastla
bastla 10.04.2011 um 23:30:48 Uhr
Goto Top
Hallo ovu-p86!

Da sollte doch eigentlich
vmstart.bat "E:\virtuell\dat\server\Windows Server 2008.vmx" "opt Parameter 2"
genügen ...

Grüße
bastla
Mitglied: Biber
Biber 10.04.2011 um 23:43:13 Uhr
Goto Top
[OT] @bastla

Seh ich zwar auch so wie du.
Kollidiert aber mit der Behauptung "Hab auch alle Variationen mit "" probiert. " face-wink

@ovu-p86
Dabei habe ich hier im Forum schon millionenmal diese Übertreibungen angeprangert.

Grüße
Biber
[/OT]
Mitglied: ovu-p86
ovu-p86 11.04.2011 um 00:06:05 Uhr
Goto Top
Hallo Bastla,

hast recht..
Weiß auch nicht was ich da gemacht habe. Kenn ich sonst auch so.
Hab den Fehler noch mal repliziert.

Aufruf:
vmstart.bat "E:\virtuell\dat\server\Windows Server 2008.vmx"

vmstart.bat::
start /WAIT "" "%1 "

Also in vmstart.bat noch mal " ". Das war falsch. Dann kommt die Meldung "E:\virtuell\dat\server\Windows" konnte nicht gefunden werden.
Wenn ich die " " in vmstart.bat weg lasse funktionierts.

Danke

Gruß
Uwe
Mitglied: Biber
Biber 11.04.2011 um 00:12:35 Uhr
Goto Top
Moin ovu-p86,

du kannst auch im vmstart-Batch, dort wo du das Start /wait stehen hast mit %~1 arbeiten.
Dadurch werden eventuelle umschliessende Anführungszeichen weggekantet.

start /WAIT "" "%~1"

Grüße
Biber
Mitglied: ovu-p86
ovu-p86 11.04.2011 um 00:24:47 Uhr
Goto Top
Hallo Biber,

danke für den Hinweis.
Wieder was dazugelernt.

Aber der Effekt der doppelten Anführungszeichen ist ja auch interessant. Trennt ja offensichtlich wieder am Leerzeichen ab.
Aber das kann man wahrscheinlich auch einfacher haben.

Gruß
Uwe
Mitglied: Biber
Biber 11.04.2011 um 00:29:58 Uhr
Goto Top
Moin ovu-p86,

eventuell hast du den CMD_interpreter daadurch auf eine falsche Fährte gebracht,
weil bei dir nicht nur doppelte Anführungszeichen in der Batch stehen,
sondern zwischen den beiden letzten auch noch ein Leerzeichen.
start /WAIT "" "%1 "

So zumindest in deiner letzten Antwort.

Sei es wie es sei - wenn es erledigt ist, dann mach bitte noch ein grünes Häkchen dran.

Grüße
Biber
Mitglied: ovu-p86
ovu-p86 11.04.2011 um 00:37:56 Uhr
Goto Top
Hallo Biber,

hab noch mal nachgeguckt, das war ein Schreibfehler im Beitrag.

richtig: start /WAIT "" "%1"

Das Phänomen gibts also und läßt sich nutzen.

Aber ich will das auch nicht aufblähen und werde den grünen Haken um 1:00 Uhr setzen.


Gruß
Uwe
Mitglied: Biber
Biber 11.04.2011 um 00:41:46 Uhr
Goto Top
Jepp, danke dir,

aber der Vollständigkeit halber noch eine weitere mögliche Fehlerquelle:
Der Parameter für den Titel kommt bei start vor allen anderen Parametern (also auch vor /WAIT)

START ["Titel"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME] | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [Befehl/Programm]
[Parameter]

Probier es doch einfach mal, indem du tatsächlich einen Titel ungleich Leerstring mitgibst.
[Sorry, das hatte ich vorhin auch gar nicht gerafft]

Grüße
Biber
Mitglied: ovu-p86
ovu-p86 11.04.2011 um 00:51:36 Uhr
Goto Top
Hallo Biber,

das Phänomen interessiert mich aber auch. Hab das ganze noch mal mit
Aufruf:
vmstart.bat "E:\virtuell\dat\server\Windows Server 2008.vmx"

vmstart.bat::
"%1"
probiert.
Also ohne Start. Dann kommt wieder die Meldung "E:\virtuell\dat\server\Windows" konnte nicht gefunden werden.
Das Phänomen der doppelten Anführungszeichen gibts also.

Da der Beitrag sich jetzt doch ausgeweitet hat, hier ein Hinweis für spätere Leser, daß die eigentliche Fragestellung
bereits im 2. Beitrag gelöst wurde.

Aber solche weiterführenden Diskussionen sollten erlaubt sein. Werde den Beitrag jetzt schließen.

Gruß
Uwe
Mitglied: Biber
Biber 11.04.2011 um 06:57:11 Uhr
Goto Top
Moin ovu-p86,

auf die Gefahr hin, dich vollends raschelig zu machen:

Wenn dein Aufruf der Batchdatei so aussieht:
vmstart.bat "E:\virtuell\dat\server\Windows Server 2008.vmx"

...dann sollte es in der Batch

-entweder so aussehen:

"%~1" && Rem Also mit Tilde=alle Anführungszeichen weg und eigene drum

oder aber
"%*" && Rem alle Parameter (Anfü-Zeichen sind automatisch weg) plus eigene Anfü-Zeichen

Grüße
Biber
Mitglied: bastla
bastla 11.04.2011 um 09:30:23 Uhr
Goto Top
... wobei Du dann noch den Effekt von
"%1"
billiger mit
%~1
haben kannst.

Erklärungsansatz: Wenn Du doppelte Anführungszeichen verwendest, wird jeweils der Teil dazwischen (also zwischen dem ersten und zweiten sowie zwischen dem dritten und vierten) zusammengehalten (auch wenn da nix steht), der Teil zwischen den Anführungszeichenpaaren (also der Pfad "E:\virtuell\dat\server\Windows Server 2008.vmx") steht wieder "nackt" da und wird am Leerzeichen getrennt - und den Effekt kannst Du auch ganz ohne Anführungszeichen erzielen ... face-wink

Grüße
bastla
Mitglied: 99045
99045 11.04.2011 um 12:08:04 Uhr
Goto Top
@bastla

Moin,

die Vermutung hatte ich auch, leider trifft sie wohl nicht zu, wie sich leicht feststellen lässt (XP SP3):
@echo off & setlocal

@echo parameter 1 ["%1"]  
@echo parameter 2 ["%2"]  
@echo parameter 3 ["%3"]  

@echo parameter ~ 1 [%~1]
@echo parameter ~ 2 [%~2]
@echo parameter ~ 3 [%~3]
Pause

Ergebnis:
R:\>test "Irgendwas mit Spaces" bla "blubb"
parameter 1 [""Irgendwas mit Spaces""]
parameter 2 ["bla"]
parameter 3 [""blubb""]
parameter ~ 1 [Irgendwas mit Spaces]
parameter ~ 2 [bla]
parameter ~ 3 [blubb]
Drücken Sie eine beliebige Taste . . .

Oder meinst du mit "zusammengehalten" nur die Ausführung?

Gruß
Mitglied: bastla
bastla 11.04.2011 um 13:15:04 Uhr
Goto Top
@99045
Oder meinst du mit "zusammengehalten" nur die Ausführung?
Yep - teste einfach mit Ordnernamen als Parameter und einem "dir" ...

Grüße
bastla
Mitglied: 99045
99045 11.04.2011 um 13:27:45 Uhr
Goto Top
@bastla

Dann hatte ich das doch in den falschen Kanal geroutet. face-smile

[OT]
Aber eigentlich unterscheiden sich ja Parameterübergabe und Parameterausführung dann mal wieder. Denn der 1. Parameter wird ja trotz der doppelten Anführungszeichen als ein Parameter zumindest erstmalig erkannt. *g
Was die rootharigen Praktikantinnen sich dabei wieder mal gedacht haben .......
[/OT]

Grüße
Mitglied: bastla
bastla 11.04.2011 um 13:53:03 Uhr
Goto Top
@99045
der 1. Parameter wird ja trotz der doppelten Anführungszeichen als ein Parameter zumindest erstmalig erkannt. *g
Das war ja in Wirklichkeit ohnehin kein Thema face-wink - der Parameter kommt ja richtig an, nur was dann damit passiert ...

Grüße
bastla
Mitglied: ovu-p86
ovu-p86 11.04.2011 um 15:19:51 Uhr
Goto Top
Hallo Bastla, Hallo Biber,

jetzt hab ichs verstanden. Wie gesagt die ursprüngliche Fragestellung war ja schon am Anfang gelöst. Sprich mein Fehler.
Hier geht es noch mal um das vermeintliche Phänomen. Als verschaulichung:

Aufruf:
test.bat "c:\programme\test ordner\test.exe"  

test.bat
echo %1
echo "%1"  
"%1"  

ergibt

>echo "c:\programme\test ordner\test.exe"  
"c:\programme\test ordner\test.exe"  

>echo ""c:\programme\test ordner\test.exe""  
""c:\programme\test ordner\test.exe""  

>""c:\programme\test ordner\test.exe""  
Der Befehl """c:\programme\test" ist entweder falsch geschrieben oder konnte nicht gefunden werden.  

Bei Echo nicht ganz so schlimm, aber beim Aufruf eines Programms fatal.
Die Erklärung ist ja bereits weiter oben gegeben worden.
Dank noch mal. Ich bin jetzt sensibilisiert.


Gruß
Uwe