我正在通过cmd批处理脚本将特殊字符替换为其字符编码,它适用于大多数特殊字符,下面的示例正在工作 -
setlocal enabledelayedexpansion
set password=!pass:@=%%40!
set password=!password:^&=%%26!
O / p - @ will show as %40
问题 - 但是这些!,*,",!,~
个字符不会替换为字符编码。
请参阅此列表 - https://grox.net/utils/encoding.html
请帮助解决此问题
答案 0 :(得分:1)
纯批次这将是困难和/或低效的。 MichaelS指出的解决方案可以适应工作,但有一种更简单的方法。
JREPL.BAT是一个混合JScript /批处理脚本,用于执行正则表达式搜索和替换。它是纯脚本,可以在任何Windows机器上从XP开始本地运行。它具有允许您指定搜索术语的分隔列表以及替换值的分隔列表的选项。
以下代码假定您的PATH指向包含JREPL.BAT的文件夹。
for /f "eol=| delims=" %%A in (
'jrepl "\x21 \x22 * | ~" "%%21 %%22 %%2A %%7C %%7E" /t " " /l /x /s password'
) do set "password=%%A"
FOR / F EOL选项设置为其中一个编码字符,这样您就不必担心导致结果被忽略的初始字符。
第一个JREPL参数是以空格分隔的搜索词列表。
第二个参数是以空格分隔的替换值列表。
/T " "
选项指定搜索和替换参数是以空格分隔的搜索和替换术语列表。
/L
选项指定将搜索字词视为文字
即使使用/X
选项,/L
选项也会在搜索字词中启用转义序列。
/S password
选项指定从密码变量中读取源输入字符串。
向空格分隔列表添加其他搜索和替换值非常简单。如果要在搜索或替换列表中包含空格,则必须将/T
选项分隔符更改为任一列表中未使用的字符。
!
表示为转义序列,以防启用延迟扩展。 "
表示为转义序列,因为引号文字不能传递给JREPL。
此解决方案的一个非常好的功能是它可以在一次通过中完成所有替换,因此您不必担心搜索/替换术语的顺序。
答案 1 :(得分:0)
这可以帮助您:String substitution (asterisks) in Batch files?
在这篇文章中,只处理了*,但你可以对其他角色做同样的事情。