Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Bat Parameter mit Leerzeichen beim Aufruf übergeben

Frage Entwicklung Batch & Shell

Mitglied: ovu-p86

ovu-p86 (Level 1) - Jetzt verbinden

10.04.2011, aktualisiert 23:35 Uhr, 15551 Aufrufe, 16 Kommentare

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
Mitglied: bastla
10.04.2011 um 23:30 Uhr
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
Bitte warten ..
Mitglied: Biber
10.04.2011 um 23:43 Uhr
[OT] @bastla

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

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

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: ovu-p86
11.04.2011 um 00:06 Uhr
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
Bitte warten ..
Mitglied: Biber
11.04.2011 um 00:12 Uhr
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
Bitte warten ..
Mitglied: ovu-p86
11.04.2011 um 00:24 Uhr
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
Bitte warten ..
Mitglied: Biber
11.04.2011 um 00:29 Uhr
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
Bitte warten ..
Mitglied: ovu-p86
11.04.2011 um 00:37 Uhr
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
Bitte warten ..
Mitglied: Biber
11.04.2011 um 00:41 Uhr
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
Bitte warten ..
Mitglied: ovu-p86
11.04.2011 um 00:51 Uhr
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
Bitte warten ..
Mitglied: Biber
11.04.2011 um 06:57 Uhr
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
Bitte warten ..
Mitglied: bastla
11.04.2011 um 09:30 Uhr
... 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 ...

Grüße
bastla
Bitte warten ..
Mitglied: 99045
11.04.2011 um 12:08 Uhr
@bastla

Moin,

die Vermutung hatte ich auch, leider trifft sie wohl nicht zu, wie sich leicht feststellen lässt (XP SP3):
01.
@echo off & setlocal 
02.
 
03.
@echo parameter 1 ["%1"] 
04.
@echo parameter 2 ["%2"] 
05.
@echo parameter 3 ["%3"] 
06.
 
07.
@echo parameter ~ 1 [%~1] 
08.
@echo parameter ~ 2 [%~2] 
09.
@echo parameter ~ 3 [%~3] 
10.
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ß
Bitte warten ..
Mitglied: bastla
11.04.2011 um 13:15 Uhr
@99045
Oder meinst du mit "zusammengehalten" nur die Ausführung?
Yep - teste einfach mit Ordnernamen als Parameter und einem "dir" ...

Grüße
bastla
Bitte warten ..
Mitglied: 99045
11.04.2011 um 13:27 Uhr
@bastla

Dann hatte ich das doch in den falschen Kanal geroutet.

[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
Bitte warten ..
Mitglied: bastla
11.04.2011 um 13:53 Uhr
@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 - der Parameter kommt ja richtig an, nur was dann damit passiert ...

Grüße
bastla
Bitte warten ..
Mitglied: ovu-p86
11.04.2011 um 15:19 Uhr
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:
01.
test.bat "c:\programme\test ordner\test.exe"
test.bat
01.
echo %1 
02.
echo "%1" 
03.
"%1"
ergibt

01.
>echo "c:\programme\test ordner\test.exe" 
02.
"c:\programme\test ordner\test.exe" 
03.
 
04.
>echo ""c:\programme\test ordner\test.exe"" 
05.
""c:\programme\test ordner\test.exe"" 
06.
 
07.
>""c:\programme\test ordner\test.exe"" 
08.
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
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Windows Server
gelöst Eventlog gesperrtes Konto, Konto als Parameter übergeben (10)

Frage von pablovic zum Thema Windows Server ...

Batch & Shell
Text-Datei auslesen und Inhalt als Parameter übergeben (1)

Frage von aubm2013 zum Thema Batch & Shell ...

Microsoft Office
gelöst Dropdownlisten in Abhängigkeit mit Leerzeichen im Namen (Datenüberprüfung) (2)

Frage von kevische zum Thema Microsoft Office ...

Batch & Shell
gelöst New-ADUser (optional Parameter) (13)

Frage von mc-doubleyou zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...