.bat批处理(十一):替换字符串中包含百分号%的子串

前言

今天这篇总结是之前批处理替换字符串的延伸问题,同样来源于读者的提问,要处理的问题是被替换的子串中如果有百分号 % 要怎样替换,因为 % 在批处理脚本中也比较特殊,如果要想表示一个 % 字符,那么在给变量赋值时需要写成 %% 的样子,用两个表示一个,类似于进行转义,因为在批处理中, %开头的内容通常表示一个变量。

之前也处理过一些替换问题,列举如下,不过今天的问题需要新的解法。

问题示例

将字符串 https://blog.csdn.net/alb%3crtsh/articl%3c/d%3ctails/124760925 中的 %3c 替换成字母 e

问题比较明确,就是因为被替换的子串中包含了 % 导致常规的替换写法 %a:b=c% 的写法失效了。

解决方法

既然子串中包含 % 会影响变量替换字符串的写法,我们就可以考虑换一种变量写法,用 ! 代替 %,看到这很多人应该反应过来了,那就是启用延迟变量扩展,这个我就不展开说了,之前总结过,可以看一下这篇文章《.bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别》

示例代码

1
2
3
4
5
6
7
8
9
10
11
@echo off
rem 将输入字符串中的%3c替换成字母e

SET INPUT_PARAM=%1
setlocal EnableDelayedExpansion

echo -
echo replace result is !INPUT_PARAM:%%3c=e!
echo -

pause

运行结果

1
2
3
4
5
D:\data\bat>replace%.bat https://blog.csdn.net/alb%3crtsh/articl%3c/d%3ctails/124760925
-
replace result is https://blog.csdn.net/albertsh/article/details/124760925
-
请按任意键继续. . .

总结

  • 批处理脚本中的替换语法不仅可以写成 %a:b=c%,还可以写成 !a:b=c!的形式
  • 批处理脚本执行机制是会按行执行,在执行之前会先预处理
  • 开启延迟环境变量扩展setlocal enabledelayedexpansion,变量会在用到时再估值,不会预处理了

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

公平不一定平等,平等也不代表公平。究竟什么是秩序,往往强者指定规则,弱者小心遵守,达到一个稳态,那就是秩序~

2022-5-15 23:02:49

Albert Shi wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客