私の最初の投稿、ほとんどの質問は、ここで提供されたこのフレンドリーな知識を使用してすでに解決されています. しかし、ここでも cmd.exe でのポイズン文字の処理に関する質問で、アイデアが不足しています。
二重引用符で囲まれた特定の文字列変数があると仮定しましょう。ほとんどの有害な文字は、以前に一般的な文字に置き換えられており、残りのスクリプトを妨害するものは「&」、「(」、「)」、および「%」です。文字列は、後で引用符なしでファイルにエコーする必要があります。そこで、毒の文字を 3 倍にして逃れるというアイデアを思いつきました。
@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
上記のスクリプトを呼び出すと、パーセント記号がないことを除けば、期待どおりの出力が得られます。
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>
パーセントはそれ自体でエスケープできることを知っています。したがって、「%%」は通常、単一のリテラル「%」につながります。しかし、cmd は常に変数として解釈し、展開しようとするため、パーセント記号の有効な置換手順を見つけることができませんでした。これは、この問題を処理するための完全に間違った方向ですか、それとも変数展開の誤解ですか? どんなヒントでも大歓迎です!ありがとう!
乾杯、マーティン
編集 独自のコードを削除しました。クリーンなソリューションについては、以下の Jeb の回答を参照してください。
助けてくれてありがとう、マーティン