gerry56
Goto Top

Variable mit Leerzeichen an andere Batchdatei übergeben

Ich möchte von der Batchdatei EINS eine Pfadangabe an die Batchdatei ZWEI übergeben.
So lange im Parameter kein Leerzeichen vorhanden ist, funktioniert auch alles.
Ist im Dateinamen oder im Pfadnamen ein Leerzeichen, wird der Parameter beim Leerzeichen abgeschnitten.
Der Teil nach dem Leerzeichen wird falsch an den nächsten Parameter übergeben.
zB

set quellverz="D:\daten\muster"  
set quelldat="dat ei.txt"  
set zielv="\Daten\muster"  
set zieldat="datei.txt"  

call d:\test\zwei.bat %zielv% %zieldat% %quellverz% %quelldat%

wird in zwei.bat zu
quellverz="D:\daten\muster"  
set "quelldat=dat"  
set zielv="ei.txt"  
set zieldat="\Daten\muster"  

Bitte um Hilfe

Gerry

Content-ID: 668910

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

Ausgedruckt am: 25.10.2024 um 23:10 Uhr

gerry56
gerry56 22.10.2024 um 00:16:08 Uhr
Goto Top
Habe soeben bemerkt, daß die Parameterübergabe zwar funktioniert, jedoch danach die Abfrage
if "%quelldat%" equ "" goto weiter den Fehler verursachte.
ohne Anführungszeichen funktioniert es.
if %quelldat% equ "" goto weiter
150704
150704 22.10.2024 aktualisiert um 00:48:50 Uhr
Goto Top
Hat ich dir eigentlich schon hier geschrieben wie man es richtig macht, aber leider überliest du hier sehr viel was man dir schreibt ...

set "quellverz=D:\daten\muster"  
set "quelldat=dat ei.txt"  
set "zielv=\Daten\muster"  
set "zieldat=datei.txt"  

call "d:\test\zwei.bat" "%zielv%" "%zieldat%" "%quellverz%" "%quelldat%"  

Zwei.bat
:: 4ten Parameter von (evt. vorh. Anführungszeichen befreien) und erst dann auch wieder mit hinzugefügten Anführungszeichen vergleichen, dann gibt es auch keine solchen Missverständnisse
if "%~4" == "" goto weiter  
Man sollte das Schema durchgehend beibehalten. Gerade wenn man Daten verarbeitet bei denen man nicht weiß ob sie mit oder ohne Anführungszeichen kommen (z.B. vom User übergebene auf die du keinen Einfluss hast) sollte man sie erst davon befreien um sie dann beim Vergleich oder Nutzung wieder hinzuzufügen, aber nicht zur Variable selbst, denn das gibt dann wieder Probleme wenn du Pfade zusammen setzen willst wie im Link schon beschrieben .
NordicMike
NordicMike 22.10.2024 um 09:30:14 Uhr
Goto Top
Ist doch logisch.

mit
call d:\test\zwei.bat %zielv% %zieldat% %quellverz% %quelldat%


erreichst du eigentlich nur das:

call d:\test\zwei.bat \Daten\muster datei.txt D:\daten\muster dat ei.txt

Deine Datei zwei.bat wird vermutlich nur 4 Parameter auswerten,
dat ei.txt
sind jedoch schon zwei Parameter, also hast du ihr 5 Parameter übergeben. Du musst es also erreichen, dass der Parameter mit Anführungszeichen übergeben wird.

"dat ei.txt"   

Näheres siehe oben von Ted
gerry56
gerry56 22.10.2024 um 13:35:09 Uhr
Goto Top
Ja, war mein Fehler.
Die Parameterübergabe funktioniert, jedoch hat xcopy Probleme mit der Dateierstellung und Pfaderstellung, wenn im Dateinamen oder im Verzeichnisnamen eine Leerstelle vorhanden ist.
150704
150704 22.10.2024 aktualisiert um 13:45:33 Uhr
Goto Top
Zitat von @gerry56:
Die Parameterübergabe funktioniert, jedoch hat xcopy Probleme mit der Dateierstellung und Pfaderstellung, wenn im Dateinamen oder im Verzeichnisnamen eine Leerstelle vorhanden ist.

Nö kann ich nicht bestätigen, klappt hie rim Test wie erwartet einwandfrei wenn man durchgängig Pfade mit Anführungszeichen nutzt ...! Dein Skript ist fehlerhaft ...

Bitte dann Beitrag schließen.
gerry56
gerry56 22.10.2024 aktualisiert um 14:57:36 Uhr
Goto Top
Es funktioniert nur in der Commandline.
In dem Moment, wo ich den Befehl xcopy in einer Batchdatei verwende, und Quelle und Ziel als Variable definiere, funktioniert der Befehl nur, wenn sowohl der Pfadname, als auch der Dateiname keine Leerzeichen enthält.
Dabei ist es egal, ob ich die Variable
set wohin="%Ziellaufwerk%":\xcopy"%Zielverzeichnis%"\"%Zieldat%"
oder set wohin="%Ziellaufwerk%:\xcopy%Zielverzeichnis%\%Zieldat%"
oder set "wohin=%Ziellaufwerk%:\xcopy%Zielverzeichnis%\%Zieldat%"
Es kommt immer die Meldung 0 Dateien kopiert.

Es ist auch egal, ob ich beim xcopy Befehl die Variable in Anführungszeichen setze, oder nicht.
Die Fehlfunktion innerhalb einer Batchdatei bleibt bei Leerzeichen im Dateinamen oder Verzeichnisnamen.