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

Printed on: December 5, 2024 at 21:12 o'clock

Netzheimer
Netzheimer Nov 21, 2008 at 06:43:46 (UTC)
Goto Top
Moin

%20 ist ein hex-ASCII-Leerzeichen. Die Ausgabe wäre ja dann richtig, oder?
Ren
Ren Nov 21, 2008 at 09:16:32 (UTC)
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 Nov 21, 2008 at 09:33:22 (UTC)
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 Nov 21, 2008 at 10:47:22 (UTC)
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!