私の最初の投稿、ほとんどの質問はここでこの親切な知識を使って解決済みです。しかし今、私は、cmd.exeで毒物文字を扱うことについての質問をもう一度持っています。与えられた変数のエスケープ・パーセント記号
与えられた文字列変数が二重引用符で囲まれているとします。ほとんどの毒物文字は既に共通の文字に置き換えられています。スクリプトを妨害する左の文字は "&"、 "("、 ")"、 "%"です。文字列は後で引用符なしでファイルにエコーする必要があります。だから私は毒の文字をエスケープする考えは三倍にしていた:私は上記の私のスクリプトを呼び出すとき
@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>
私が知っているパーセントというそれ自身でエスケープすることができます。したがって、 "%%"は通常、1つのリテラル "%"につながります。しかし、cmdは常に変数として解釈して展開しようとしているので、パーセント記号の作業置換プロシージャを見つけることはできませんでした。これは、この問題を処理するための完全な間違った方向ですか、あるいは可変展開の誤解ですか?どんなヒントも歓迎!ありがとう!
乾杯、マーティン
編集 はきれいな解決のためのジェブの答え下記参照、独自のコードを削除しました。
マーティン
Jeb、私は[リンク](http://ss64.org/viewtopic.php?pid=4919#p4919)をあなたの信じられないほどのハックで見た後にあなたが答えてくれることを願っています。最後に上記の提案は私の問題を毒物文字で解決しました。私はコードブロックフォーマットを使用したいので、私の質問にあなたのソリューションに基づいて短いコードスニペットを追加しました。どうもありがとう! Martin – CmdQuestion
Aarrg - どうしたの? _clean_解決策を追加しました – jeb
Jeb、ご迷惑をおかけして申し訳ありません。コードを使用すると、文字の組み合わせに問題は発生しませんでしたので、ここに結果を表示することが十分に役立つと思いました。私はそれをスキップし、ちょうど今あなたのソリューションを参照しました。 Martin – CmdQuestion