我的第一篇文章,大多数问题已经使用这里提供的友好知识解决了。但是现在我的想法已经用完了,又是一个关于在 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 总是将其解释为变量并尝试扩展它。这是处理这个问题的完全错误的方向还是只是对变量扩展的误解?欢迎任何提示!谢谢!
干杯,马丁
编辑 删除了自己的代码,请参阅下面 Jeb 对干净解决方案的回答。
谢谢你的帮助,马丁