加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 在给定变量中转义百分号

发布时间:2020-12-14 01:56:20 所属栏目:Windows 来源:网络整理
导读:我的第一篇文章,大多数问题已经使用这里友好提供的知识解决了.但是现在我的想法已经用完了,还有一个关于在cmd.exe中处理毒物字符的问题. 假设有一个用双引号括起来的给定字符串变量.大多数毒物角色之前已经被常见的字符替换,左边的那些扰乱脚本的是“”,“(
我的第一篇文章,大多数问题已经使用这里友好提供的知识解决了.但是现在我的想法已经用完了,还有一个关于在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:YAET20130204_Work>TryAmper.bat "100% Rock & Roll (7' UpMix)"
=hyperlink("file://100 Rock & Roll (7' UpMix)";"LossLess")
100 Rock & Roll (7' UpMix)

G:YAET20130204_Work>

我知道这个百分比可以自己逃脱.所以“%%”通常会导致单个文字“%”.但是我找不到百分号的工作替换程序是不可能的,因为cmd总是将它解释为变量并尝试扩展它.这是处理这个问题的完全错误的方向还是只是对变量扩展的误解?任何提示都欢迎!谢谢!

干杯,马丁

编辑
删除了自己的代码,见下面Jeb对清洁解决方案的回答.

谢谢你的帮助,马丁

解决方法

好问题!
首先,是的,你可以更换百分号,但不是百分比扩展,你需要在这里延迟扩展.

Setlocal EnableDelayedExpansion
set tmpstr=!tmpstr:%=%%!

但是如果使用延迟扩展,则不再需要转义,因为延迟扩展是批处理解析器的最后阶段,并且所有字符都失去了任何特殊含义.
您只需要延迟扩展即可回应.

Echo !tmpvar!

编辑:清洁解决方案

@echo off
setlocal DisableDelayedExpansion

REM * More or less secure getting the parameter
SET "AlbumArtist=%~1"

setlocal EnableDelayedExpansion
SET "FlacHyperLink==hyperlink("file://!AlbumArtist!";"LossLess")"

echo !FlacHyperLink!
echo !FlacHyperLink!> hugo.txt

首先需要disableDelayedExpansion,以获得%1的感叹号.之后,您应该切换到延迟扩展并在任何地方使用它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读