前言
今天这篇总结是之前批处理替换字符串的延伸问题,同样来源于读者的提问,要处理的问题是被替换的子串中如果有百分号 %
要怎样替换,因为 %
在批处理脚本中也比较特殊,如果要想表示一个 %
字符,那么在给变量赋值时需要写成 %%
的样子,用两个表示一个,类似于进行转义,因为在批处理中, %
开头的内容通常表示一个变量。
之前也处理过一些替换问题,列举如下,不过今天的问题需要新的解法。
问题示例
将字符串
https://blog.csdn.net/alb%3crtsh/articl%3c/d%3ctails/124760925
中的%3c
替换成字母e
问题比较明确,就是因为被替换的子串中包含了 %
导致常规的替换写法 %a:b=c%
的写法失效了。
解决方法
既然子串中包含 %
会影响变量替换字符串的写法,我们就可以考虑换一种变量写法,用 !
代替 %
,看到这很多人应该反应过来了,那就是启用延迟变量扩展,这个我就不展开说了,之前总结过,可以看一下这篇文章《.bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别》。
示例代码
1 | @echo off |
运行结果
1 | D:\data\bat>replace%.bat https://blog.csdn.net/alb%3crtsh/articl%3c/d%3ctails/124760925 |
总结
- 批处理脚本中的替换语法不仅可以写成
%a:b=c%
,还可以写成!a:b=c!
的形式 - 批处理脚本执行机制是会按行执行,在执行之前会先预处理
- 开启延迟环境变量扩展
setlocal enabledelayedexpansion
,变量会在用到时再估值,不会预处理了
公平不一定平等,平等也不代表公平。究竟什么是秩序,往往强者指定规则,弱者小心遵守,达到一个稳态,那就是秩序~
2022-5-15 23:02:49