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

前言

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

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

问题示例

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

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

解决方法

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

示例代码

@echo off
rem 将输入字符串中的%3c替换成字母e

SET INPUT_PARAM=%1
setlocal EnableDelayedExpansion

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

pause

运行结果

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,变量会在用到时再估值,不会预处理了

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

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlbertS

常来“玩”啊~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值