Übergabe von Variabeln die Prozentzeichen enthalten per call
Hallo
Ich habe eine Batch inder ich unter anderm in einer For-Schleife Dateinamen aus einer Datei auslese die dann, nach weiteren Aktionen vorher, kopiert werden sollen.
Daher übergebe ich diese Dateinamen jeweils per Call einer Unterfunktion inder das alles gemacht wird und am ende eben auch die Kopieraktion.
Leider können in den Dateinamen alle möglichen Zeichen vorkommen, also auch ! (weshalb ich nicht mit delayedexpansion arbeiten kann) und eben auch %. Und genau dort liegt das Problem.
Übergebe ich per call die einzelnen Dateinamen werden bei denen die ein % enthalten die Prozentzeichen einfach entfernt. Dadurch geht am Ende die Kopieraktion schief weil die Datei (die ja nun ohne % zum Kopieren genommen werden soll, nicht gefunden werden kann.
Hier mal zur besseren Anschauung ein kleines Beispiel was ich meine.
In Datei.txt stehen die Datienamen einfach untereinander:
Würde ich die Beschriebene Batchdatei ausführen würde allerdings sowas bei rauskommen:
Was kann ich da tun?
Ich hab schon versucht per set befehl das % durch ein ^% zu ersetzen aber das haut nicht wirklich hin wieichs versucht habe.
Auch eine Übergabe als
Ich bin für alle hilfreichen Tips dankbar.
Ich habe eine Batch inder ich unter anderm in einer For-Schleife Dateinamen aus einer Datei auslese die dann, nach weiteren Aktionen vorher, kopiert werden sollen.
Daher übergebe ich diese Dateinamen jeweils per Call einer Unterfunktion inder das alles gemacht wird und am ende eben auch die Kopieraktion.
Leider können in den Dateinamen alle möglichen Zeichen vorkommen, also auch ! (weshalb ich nicht mit delayedexpansion arbeiten kann) und eben auch %. Und genau dort liegt das Problem.
Übergebe ich per call die einzelnen Dateinamen werden bei denen die ein % enthalten die Prozentzeichen einfach entfernt. Dadurch geht am Ende die Kopieraktion schief weil die Datei (die ja nun ohne % zum Kopieren genommen werden soll, nicht gefunden werden kann.
Hier mal zur besseren Anschauung ein kleines Beispiel was ich meine.
@echo off
FOR /F "delims=" %%i in (Datei.txt) do (
echo Vorher: %%i
call:machwas "%%i"
)
goto:eof
:machwas
echo Nachher: %~1
goto:eof
FOR /F "delims=" %%i in (Datei.txt) do (
echo Vorher: %%i
call:machwas "%%i"
)
goto:eof
:machwas
echo Nachher: %~1
goto:eof
In Datei.txt stehen die Datienamen einfach untereinander:
C:\Verzeichnis\erste Datei.txt
d:\anderes Verzeichnis\andere% Datei.txt
c:\noch ein Verzeichnis\und noch ne Datei.txt
d:\anderes Verzeichnis\andere% Datei.txt
c:\noch ein Verzeichnis\und noch ne Datei.txt
Würde ich die Beschriebene Batchdatei ausführen würde allerdings sowas bei rauskommen:
Vorher: C:\Verzeichnis\erste Datei.txt
Nachher: C:\Verzeichnis\erste Datei.txt
Vorher: d:\anderes Verzeichnis\andere% Datei.txt
Nachher: d:\anderes Verzeichnis\andere Datei.txt
Vorher: c:\noch ein Verzeichnis\und noch ne Datei.txt
Nachher: c:\noch ein Verzeichnis\und noch ne Datei.txt
Wie man sehen kann wird die zweite Datei "andere% Datei.txt" nicht richtig übergeben.Nachher: C:\Verzeichnis\erste Datei.txt
Vorher: d:\anderes Verzeichnis\andere% Datei.txt
Nachher: d:\anderes Verzeichnis\andere Datei.txt
Vorher: c:\noch ein Verzeichnis\und noch ne Datei.txt
Nachher: c:\noch ein Verzeichnis\und noch ne Datei.txt
Was kann ich da tun?
Ich hab schon versucht per set befehl das % durch ein ^% zu ersetzen aber das haut nicht wirklich hin wieichs versucht habe.
Auch eine Übergabe als
call:machwas "%%~si"
also in 8.3 Form nützt mir nichts, weil ich den ganzen Namen vorher in dieser "Machwas" benötige.Ich bin für alle hilfreichen Tips dankbar.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 86922
Url: https://administrator.de/contentid/86922
Ausgedruckt am: 21.11.2024 um 13:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo miniversum!
[Edit] ... bzw noch einfacher:
[/Edit]
Grüße
bastla
Ich hab schon versucht per set befehl das % durch ein ^% zu ersetzen
Ersetze % durch %% ...[Edit] ... bzw noch einfacher:
@echo off
FOR /F "delims=" %%i in (Datei.txt) do (
set "Dat=%%i"
echo Vorher : %%i
call:machwas "%%i"
)
goto:eof
:machwas
echo Nachher : %~1
echo Variable: %Dat%
echo\
goto:eof
Grüße
bastla