ren
Goto Top

Prozentzeichen in Übergabeparameter

Hm, mein Problem ist schwierig zu beschreiben: ich will in einer Batch einen Liste mit Dateien und Verzeichnissen bearbeiten. In den Dateinamen können leider "!", "%", "&", und noch ein paar eklige Sonderzeichen auftauchen. Sagen wir mal, ich hätte folgende Dateien:
"hallo.txt"  
"test %20 blöd%.txt"  
"test %genutztevariable%.txt"  
Bis her habe ich dann soetwas:
@echo off
set "genutztevariable=Kommt in Dateien nie vor: * ? \"  
::hier stimmt die Ausgabe
for /f "delims=" %%i IN ('dir /b') DO echo "%%~i"  
echo ---
::hier verschwinden meine %, oder werden durch deren Inhalte ersetzt
for /f "delims=" %%i IN ('dir /b') DO call :handlefile "%%~i"  
goto :end

:handlefile
echo "%~1"  
::eigentliche Funktionen
goto :eof
:end
Die Ausgabe auf dem Bildschirm sieht so aus:
"hallo.txt"  
"test %20 blöd%.txt"  
"test %genutztevariable%.txt"  
---
"hallo.txt"  
"test 0 blöd.txt"  
"test Kommt in Dateien nie vor: * ? \.txt"  
Gibt es einen Möglichkeit, wie ich die Prozentzeichen und den Text zwischen ihnen als Übergabeparameter retten kann? setlocal enabledelayedexpansion geht glaube ich nicht, weil ich dann ja meine "!" verliere.

Content-ID: 102329

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

Ausgedruckt am: 22.11.2024 um 19:11 Uhr

Netzheimer
Netzheimer 21.11.2008 um 07:43:46 Uhr
Goto Top
Moin

%20 ist ein hex-ASCII-Leerzeichen. Die Ausgabe wäre ja dann richtig, oder?
Ren
Ren 21.11.2008 um 10:16:32 Uhr
Goto Top
Es mag ja sein, das %20 ein hex-ASCII-Leerzeichen ist, aber es kann auch einfach als String in einem Dateinamen vorkommen, und in meiner Batch muss ich das dann als solchen String als Übergabeparameter übergeben. Ich habe den Text oben auch noch mal korrigiert und angepasst um zu zeigen, dass es nicht nur %20 ist, was schief läuft, sondern eigentlich jedes %xx%, weil es scheinbar einfach als Variable angesehen wird. Meistens ist eine solche Variable dann leer, es kann natürlich auch mal sein, dass sie nicht leer ist.
Biber
Biber 21.11.2008 um 10:33:22 Uhr
Goto Top
Moin Ren,

versuche es in diesem Spezialfall (wenn Du weißt, dass die Dateinamen so aussehen könnten) so.
:: --------RenBsp.bat
@echo off & setlocal
::hier stimmt die Ausgabe
for /f "delims=" %%i IN ('dir /b') DO echo %%i  
echo ---
::hier verschwinden meine % jetzt nicht mehr
for /f "delims=" %%i IN ('dir /b') DO set "thisfile="%%~i"" & call :handlefile  
goto :end

:handlefile
Echo thisfile: %thisfile%
::eigentliche Funktionen ---- nimm %thisfile% statt %1
goto :eof
:end
Ausgabe:
>renbsp
renBsp.bat
test %20 blöd%.txt
test.txt
hallo.txt
---
thisfile: "renBsp.bat"  
thisfile: "test %20 blöd%.txt"  
thisfile: "test.txt"  
thisfile: "hallo.txt"  

Grüße
Biber
Ren
Ren 21.11.2008 um 11:47:22 Uhr
Goto Top
Super! Früher, als ich noch nicht wusste, dass man bei call innerhalb einer Batch Übergabeparameter mitgeben kann, da hätte ich es auch so gemacht. Es Funktioniert! Vielen Herzlichen Dank! Ist zwar noch etwas früh, aber ein schönes Wochenende wünsche ich!