我的第一篇文章,大多數問題已經在這裏使用這個友好的提供知識已經解決。但是現在我用完了想法,再次提出了有關在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>
我知道的百分比可以自行逃脫。所以「%%」通常會導致一個單一的文字「%」。但是我不可能找到百分號的替換程序,因爲cmd總是將它解釋爲一個變量並試圖擴展它。這是處理這個問題的完全錯誤的方向,還是誤解變量擴展?任何提示歡迎!謝謝!
乾杯,馬丁
編輯 刪除自己的代碼,請參見下面傑布的答案乾淨的解決方案。
感謝您的幫助,馬丁
傑布,我希望你會回答我看到了[鏈接](http://ss64.org/viewtopic.php?pid=4919#p4919)與你難以置信的黑客我還是不完全理解後。最後你的建議解決了我的問題與毒藥字符。我基於你的解決方案添加了一個簡短的代碼片段,因爲我想使用代碼塊格式。非常感謝! Martin – CmdQuestion
Aarrg - 你做了什麼?我添加了一個_clean_解決方案 – jeb
Jeb,如果你對我的工作不滿意,很抱歉。使用代碼我沒有遇到任何字符組合的問題,所以我認爲在這裏展示結果會很好。我跳過它,現在只是提到你的解決方案。馬丁 – CmdQuestion