当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 问题示例
  • 解决方法
    • 示例代码
    • 运行结果
  • 总结

前言

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

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

  • 《.bat批处理(六):替换字符串中匹配的子串》
  • 《.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,变量会在用到时再估值,不会预处理了

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

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

相关文章:

  • linux环境下常用的查找命令find、which、grep
  • 了解git裸仓库并利用post-receive自动化部署
  • C++17新语法之if和switch语句中可以初始化变量啦
  • C++11中的noexcept说明符和操作符
  • 偶然在github开源项目中发现了.travis.yml这货
  • C++17使用std::optional表示一个可能存在的值
  • 推荐一个C++枚举转字符串的开源项目magic_enum
  • 只问耕耘,不问收获,其实收获却在耕耘中
  • 一个月黑风高的夜晚紧急完成gitlab服务器数据迁移
  • SVN如何删除文件名包含空格的文件
  • std::uniform_real_distribution的一个bug引发的服务器崩溃
  • 参考开源项目实现一个简易的C++枚举转字符串的函数
  • git查看历史记录及修改内容
  • rm -rf 真是删库跑路的一把好手
  • 智能指针(三):weak_ptr浅析
  • 【EOS】Cleos基础
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【React系列】如何构建React应用程序
  • C学习-枚举(九)
  • ESLint简单操作
  • Fabric架构演变之路
  • js写一个简单的选项卡
  • Laravel Mix运行时关于es2015报错解决方案
  • linux学习笔记
  • PermissionScope Swift4 兼容问题
  • Python爬虫--- 1.3 BS4库的解析器
  • vue.js框架原理浅析
  • Vue实战(四)登录/注册页的实现
  • zookeeper系列(七)实战分布式命名服务
  • 从PHP迁移至Golang - 基础篇
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 对JS继承的一点思考
  • 多线程 start 和 run 方法到底有什么区别?
  • 反思总结然后整装待发
  • 关于List、List?、ListObject的区别
  • 后端_ThinkPHP5
  • 排序算法学习笔记
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 详解NodeJs流之一
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 我们雇佣了一只大猴子...
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​业务双活的数据切换思路设计(下)
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #pragam once 和 #ifndef 预编译头
  • #微信小程序:微信小程序常见的配置传值
  • $.ajax,axios,fetch三种ajax请求的区别
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (c语言)strcpy函数用法
  • (SpringBoot)第二章:Spring创建和使用
  • (二)pulsar安装在独立的docker中,python测试
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (四)Linux Shell编程——输入输出重定向