Escape-Prozentzeichen in gegebenen Variablen

Mein erster Beitrag, die meisten Fragen wurden bereits mit diesem freundlichen Wissen hier gelöst. Aber jetzt habe ich keine Ideen mehr, wieder mit einer Frage zum Umgang mit Giftzeichen in cmd.exe.

Nehmen wir an, dass eine bestimmte Zeichenfolgenvariable in Anführungszeichen eingeschlossen ist. Die meisten Giftzeichen wurden bereits zuvor durch gewöhnliche Zeichen ersetzt, die das Skript störenden Zeichen sind "&", "(", ")" und "%". Die Zeichenfolge muss anschließend in einer Datei ohne Anführungszeichen wiedergegeben werden. So hatte ich die Idee, den Giftcharakteren dreifach zu entkommen:

@echo off & setlocal ENABLEEXTENSIONS
SET AlbumArtist=%1
CALL :EscapePoisonChars %AlbumArtist% AlbumArtist_VDN

SET "FlacHyperLink==hyperlink^("file://%AlbumArtist_VDN%"^;"LossLess"^)")
echo %FlacHyperLink%
echo %AlbumArtist_VDN%

endlocal &GOTO:EOF

:EscapePoisonChars
@echo off & setlocal ENABLEEXTENSIONS
SET TmpString=%1
SET TmpString=%TmpString:&=^^^&%
SET TmpString=%TmpString:(=^^^(%
SET TmpString=%TmpString:)=^^^)%
endlocal&SET %2=%TmpString:~1,-1%&GOTO :EOF

Wenn ich mein Skript oben aufrufe, erhalte ich die erwartete Ausgabe - abgesehen vom fehlenden Prozentzeichen:

G:\YAET\20130204_Work>TryAmper.bat "100% Rock & Roll (7' UpMix)"
=hyperlink("file://100 Rock & Roll (7' UpMix)";"LossLess")
100 Rock & Roll (7' UpMix)

G:\YAET\20130204_Work>

Ich weiß, dass der Prozentsatz von selbst entkommen kann. "%%" führt normalerweise zu einem einzelnen Literal "%". Es war mir jedoch nicht möglich, eine funktionierende Ersetzungsprozedur für Prozentzeichen zu finden, da cmd diese immer als Variable interpretiert und versucht, sie zu erweitern. Ist dies die völlig falsche Richtung, um dieses Problem zu lösen, oder nur ein Missverständnis der Variablenexpansion? Irgendwelche Tipps willkommen! Vielen Dank!

Prost, Martin

Bearbeiten Eigenen Code entfernt, siehe unten Jebs Antwort für saubere Lösung.

Danke für Hilfe, Martin

Antworten auf die Frage(1)

Ihre Antwort auf die Frage