本文为作者原创文章,为尊重作者劳动成果禁止非授权转载,若需转载请在【全栈工程师修炼指南】公众号留言,或者发送邮件到 [master@weiyigeek.top] 中我将及时回复。
0x00 前言简述描述: 不管是哪一门编程语言,最终都逃不过字符串的处理,通常是字符串的生成、替换、截取、匹配等相关操作,针对Windows中的批处理也是一样的,所以本章将主要介绍在批处理中针对字符串处理的相关实践知识。
温馨提示: Windows Batch 批处理系列教程示例脚本可访问作者Github仓库中DevelopLearnig的项目,✈直达-> https://github.com/WeiyiGeek/DevelopLearnig/tree/main/TerminalScript/bat
0x01 批处理(Batch)字符串处理
1.批处理中ASCII码的输入输出
描述: 计算机中最基本的编码ASCII码(
用来实现人与计算机交流的
由于计算机只能识别二进代码,所以ASCII码中每一个字符都由八位二进制数表示,其中二进制代码的最高位恒为零,为了方便人们记忆又将二进制代码转换为相应的十进制数为0~127,其中
0~31及127(共33个)
在批处理的cmd窗口中, 我们可以通过任意一个字符的ASCII码来输入该字符(
字母a-z对应97-122, 字母A-Z对应65-90
Ctrl+G、Ctrl+N、Ctrl+I
^G/^N/^I
示例演示:
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;"># Day04/01.ascii.bat@echo off@REM 按键示例通过Ctrl + 字母生成echo ^Q^W^E^R^T^Y^U^O^P^A^D^K^K^L^L^Z^X^V^B^N@REM 按键示例通过ALT + 十进制(ASCII码)alt+48alt+49alt+123alt+124alt+125
执行结果:

2.字符串常规处理
描述: 前面我们说过批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集。
在批处理中可实现的字符串处理功能有:
截取字符串内容、替换字符串特定字段、合并字符串、扩充字符串
描述: 截取字符串可以说是字符串处理功能中最常用的一个子功能了,能够实现截取字符串中的特定位置的一个或多个字符。
语法:
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;"># 基础格式: %a:~[m[,n]]%# 使用说明: %a:~0,n% 相当于函数 left(a,n) 取左边n位%a:~-m% 相当于函数 right(a,m) 取右边m位%a:~m,n% 相当于函数 mid(a,m+1,n) 从m+1位开始取n位%a:~m,-n% 相当于函数 mid(a,m+1,len(a)-m-n) 从m+1位开始,至倒数n+1位%a:~m% 相当于函数 mid(a,m+1,len(a)-m) 或者 right(a,len(a)-m) 从m+1位开始取右边->全部%a:~-m,n% 相当于函数 right(a,m) 从右边第m-1起然后再向后截取n个字符
示例演示:
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;"># day04/02.substring.bat@echo off@REM 批处理中截取字符串示例clsset ifo=0123456789-ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz@REM 截取前10个字符echo 1.截取前10个字符echo %ifo:~0,10%echo.@REM 截取后26个字符echo 2.截取后26个字符echo %ifo:~-26%echo.@REM 截取从第10个字符开始+1-向后截取27个字符echo 3.截取从第10个字符开始+1向后截取27个字符echo %ifo:~10,27%echo.@REM 截取从第23个字符开始+1,截取到后13个字符echo 4.截取从第23个字符开始1,截取到后13个字符echo %ifo:~23,-13%echo.@REM 截取从第23个字符开始+1,截取向右最的后字符echo 5.截取从第23个字符开始+1,截取向右最的后字符echo %ifo:~23%@REM 截取从后数第53个字符开始+1,然后从这截取到得部分向后截取26个字符echo 6.截取从后数第53个字符开始+1,然后从这截取到得部分向后截取26个字符echo %ifo:~-53,26%pause
执行结果:
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;">1.截取前10个字符01234567892.截取后26个字符abcdefghijklmnopqrstuvwxyz3.截取从第10个字符开始+1向后截取27个字符-ABCDEFGHIJKLMNOPQRSTUVWXYZ4.截取从第23个字符开始1,截取到后13个字符MNOPQRSTUVWXYZ-abcdefghijklm5.截取从第23个字符开始+1,截取向右最的后字符MNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz6.截取从后数第53个字符开始+1,然后从这截取到得部分向后截取26个字符ABCDEFGHIJKLMNOPQRSTUVWXYZ
描述: 在批处理中,我们可以非常方便的将某一字符串中的特定字符或字符串替换为给定的字符串.
语法说明:
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;">%PATH:被替换字符串=替换字符串%
示例演示:
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;"># day04/03.replacestring.bat@echo off:: # 批处理中字符串替换示例clsset url=www.weiyigeek.topecho url 替换前 %url%echo url 替换后 %url:www=blog% @REM 上述替换操作并不会改变变量url的值echo url = %url%@REM 若替换后用set重新赋值则变量url将会改变set "url=%url:www.=share.%" echo "url => %url%"@REM 将系统时间不足两位的以0补齐。set hour=%time:~0,2%echo 替换前的hour值=%hour%set "hour=%hour: =0%"echo 替换后的hour值=%hour%pause
执行结果:
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;">url 替换前 www.weiyigeek.topurl 替换后 blog.weiyigeek.topurl = www.weiyigeek.top"url => share.weiyigeek.top"替换前的hour值= 9替换后的hour值=09
温馨提示: 如上述代码所示,若需要修改替换前的变量为替换后的结果,我们需要使用set命令进行设置。
拼接字符串描述: 在批处理中,与大多数编程语言一样也需要针对字符串进行拼接,而在Bat中类似于Shell只需要将两个存放字符串的变量放在一起即可,你也不需要关心其数据类型。
示例演示:
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;"># day04/04.concateString.bat@echo off:: # 批处理中字符串拼接示例clsset name="Weiyi"set lastname="Geek"set age=88set section="中国梦,我的梦"echo %name%%lastname%echo "age => %age%":: 此处需要注意其双引号set "section=%name%%lastname% %section% ,my age is %age%."pause
执行结果:
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;">Weiyi Geek "中国梦,我的梦""age => 88"WeiyiGeek "中国梦,我的梦" ,my age is 88.
描述:“扩充”这个词汇来自于微软自己的翻译,意思就是对表示文件路径的字符串进行特殊的处理,其实我们在变量那一章节就简单的涉及,此处作者将作为其扩展与补充:
扩充字符串一览
扩充变量
备注说明
示例
%~I
删除任何引号("),扩充 %I
05.expandStringVar.bat
%~dI
仅将 %I 扩充到一个驱动器号
L:
%~pI
仅将 %I 扩充到一个路径
\GitProject\DevelopLearnig\TerminalScript\Bat\Day04\
%~dpI
[组合修饰符]仅将 %I 扩充到一个驱动器号和路径
L:\GitProject\DevelopLearnig\TerminalScript\Bat\Day04\
%~nI
仅将 %I 扩充到一个文件名
05.expandStringVar
%~xI
仅将 %I 扩充到一个文件扩展名
.bat
%~nxI
[组合修饰符] 仅将 %I 扩充到一个文件名和扩展名
05.expandStringVar.bat
%~fI
将 %I 扩充到一个完全合格的路径名
L:\GitProject\DevelopLearnig\TerminalScript\Bat\Day04\05.expandStringVar.bat
%~sI
扩充的路径只含有短名
L:\GITPRO~1\DEVELO~1\TERMIN~1\Bat\Day04\05EXPA~1.BAT
%~fsI
仅将 %I 扩充到一个带有短名的完整路径名
L:\GITPRO~1\DEVELO~1\TERMIN~1\Bat\Day04\05EXPA~1.BAT
%~aI
将 %I 扩充到文件的文件属性
--a--------
%~tI
将 %I 扩充到文件的日期/时间
2023-07-16 09:21
%~zI
将 %I 扩充到文件的大小
566
%~$PATH:I
查找列在路径环境变量的目录,并将 %I 扩充
L:
%~dp$PATH:I
查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个驱动器号和路径。
L:\GitProject\DevelopLearnig\TerminalScript\Bat\Day04\
%~ftzaI
将 %I 扩充到类似输出线路的 DIR 以及Linux中的ll命令
--a-------- 2023-07-16 09:21 566 L:\GitProject\DevelopLearnig\TerminalScript\Bat\Day04\05.expandStringVar.bat
温馨提示: 上述I代表变量I,不过需要说明的是,不是所有的变量都能够进行扩充的,有两个条件一是该字符串代表一个文件路径;二是变量要用%x来表示,x可取a-z A-Z 0-9共62个字符中的任意一个。
温馨提示: 如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串。
示例演示:
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;">@echo off@REM 批处理中扩充字符串示例,此处以0来做变量演示echo 完全路径:%0echo 去掉引号:%~0echo 所在分区:%~d0echo 所处路径:%~p0echo 文件名:%~n0echo 扩展名:%~x0echo 路径和带有短文件名:%~f0 = %~s0echo 文件属性:%~a0echo 修改时间:%~t0echo 文件大小:%~z0@REM 可以用上面的修饰符进行重新组合,达到的扩充字符串!echo 驱动器号和路径:%~dp0echo 文件名和扩展名:%~nx0echo 完整路径名带有短文件名:%~fs0echo 相当于Linux中ll命令显示的的效果:echo %~ftza0echo 当前环境变量分区:%~ds$PATH:0echo 当前环境变量路径与短文间名称:%~fs$PATH:0pause
执行结果:
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;">Day04>05.expandStringVar.bat完全路径:05.expandStringVar.bat去掉引号:05.expandStringVar.bat所在分区:L:所处路径:\GitProject\DevelopLearnig\TerminalScript\Bat\Day04\文件名:05.expandStringVar扩展名:.bat路径和带有短文件名:L:\GitProject\DevelopLearnig\TerminalScript\Bat\Day04\05.expandStringVar.bat = L:\GITPRO~1\DEVELO~1\TERMIN~1\Bat\Day04\05EXPA~1.BAT文件属性:--a--------修改时间:2023-07-16 09:29文件大小:570驱动器号和路径:L:\GitProject\DevelopLearnig\TerminalScript\Bat\Day04\文件名和扩展名:05.expandStringVar.bat完整路径名带有短文件名:L:\GITPRO~1\DEVELO~1\TERMIN~1\Bat\Day04\05EXPA~1.BAT相当于Linux中ll命令显示的的效果:--a-------- 2023-07-16 09:29 570 L:\GitProject\DevelopLearnig\TerminalScript\Bat\Day04\05.expandStringVar.bat当前环境变量分区:L:当前环境变量路径与短文间名称:L:\GITPRO~1\DEVELO~1\TERMIN~1\Bat\Day04\05EXPA~1.BAT
本文至此完毕,更多技术文章,尽情等待下篇好文!
原文地址: https://blog.weiyigeek.top/2023/7-7-761.html
以上就是运维必学 | 字符串处理-从零开始学Windows批处理(Batch)编程系列教程的详细内容,更多请关注php中文网其它相关文章!
编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号