0

0

运维必学 | 字符串处理-从零开始学Windows批处理(Batch)编程系列教程

星夢妙者

星夢妙者

发布时间:2025-08-24 08:04:26

|

378人浏览过

|

来源于php中文网

原创

本文为作者原创文章,为尊重作者劳动成果禁止非授权转载,若需转载请在【全栈工程师修炼指南】公众号留言,或者发送邮件到 [master@weiyigeek.top] 中我将及时回复。

0x00 前言简述

描述: 不管是哪一门编程语言,最终都逃不过字符串的处理,通常是字符串的生成、替换、截取、匹配等相关操作,针对Windows中的批处理也是一样的,所以本章将主要介绍在批处理中针对字符串处理的相关实践知识。

温馨提示: Windows Batch 批处理系列教程示例脚本可访问作者Github仓库中DevelopLearnig的项目,✈直达-> https://github.com/WeiyiGeek/DevelopLearnig/tree/main/TerminalScript/bat


0x01 批处理(Batch)字符串处理

1.批处理中ASCII码的输入输出

描述: 计算机中最基本的编码ASCII码(

用来实现人与计算机交流的
)是美国信息交换标准码,共128个包括52个英文字母大小写、10个阿拉伯数字和英文标点及一些控制符, 它是最通用的信息交换标准,并等同于国际标准 ISO/IEC 646。

由于计算机只能识别二进代码,所以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
, 而ASCII码大于26的字符,可以通过按住Alt键不松,通过小键盘输入ASCII码的十进制值,然后松开Alt键即可。

示例演示:

代码语言:javascript代码运行次数:0运行复制
# 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+124124alt+125

执行结果:

运维必学 | 字符串处理-从零开始学Windows批处理(Batch)编程系列教程

2.字符串常规处理

描述: 前面我们说过批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集。

在批处理中可实现的字符串处理功能有:

截取字符串内容、替换字符串特定字段、合并字符串、扩充字符串
等功能。

截取字符串

描述: 截取字符串可以说是字符串处理功能中最常用的一个子功能了,能够实现截取字符串中的特定位置的一个或多个字符。

语法:

代码语言:javascript代码运行次数:0运行复制
# 基础格式: %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运行复制
# 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运行复制
1.截取前10个字符01234567892.截取后26个字符abcdefghijklmnopqrstuvwxyz3.截取从第10个字符开始+1向后截取27个字符-ABCDEFGHIJKLMNOPQRSTUVWXYZ4.截取从第23个字符开始1,截取到后13个字符MNOPQRSTUVWXYZ-abcdefghijklm5.截取从第23个字符开始+1,截取向右最的后字符MNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz6.截取从后数第53个字符开始+1,然后从这截取到得部分向后截取26个字符ABCDEFGHIJKLMNOPQRSTUVWXYZ
替换字符串

描述: 在批处理中,我们可以非常方便的将某一字符串中的特定字符或字符串替换为给定的字符串.

语法说明:

代码语言:javascript代码运行次数:0运行复制
%PATH:被替换字符串=替换字符串%

示例演示:

代码语言:javascript代码运行次数:0运行复制
# 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运行复制
url 替换前 www.weiyigeek.topurl 替换后 blog.weiyigeek.topurl = www.weiyigeek.top"url => share.weiyigeek.top"替换前的hour值= 9替换后的hour值=09

温馨提示: 如上述代码所示,若需要修改替换前的变量为替换后的结果,我们需要使用set命令进行设置。

拼接字符串

描述: 在批处理中,与大多数编程语言一样也需要针对字符串进行拼接,而在Bat中类似于Shell只需要将两个存放字符串的变量放在一起即可,你也不需要关心其数据类型。

示例演示:

代码语言:javascript代码运行次数:0运行复制
# 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运行复制
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

知了zKnown
知了zKnown

知了zKnown:致力于信息降噪 / 阅读提效的个人知识助手。

下载

仅将 %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运行复制
@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运行复制
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

相关文章

编程速学教程(入门课程)
编程速学教程(入门课程)

编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

401

2023.06.20

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

620

2023.07.25

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

354

2023.08.02

c语言数据结构
c语言数据结构

数据结构是指将数据按照一定的方式组织和存储的方法。它是计算机科学中的重要概念,用来描述和解决实际问题中的数据组织和处理问题。数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、堆栈和队列等,而非线性结构包括树和图等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

259

2023.08.09

c语言random函数用法
c语言random函数用法

c语言random函数用法:1、random.random,随机生成(0,1)之间的浮点数;2、random.randint,随机生成在范围之内的整数,两个参数分别表示上限和下限;3、random.randrange,在指定范围内,按指定基数递增的集合中获得一个随机数;4、random.choice,从序列中随机抽选一个数;5、random.shuffle,随机排序。

606

2023.09.05

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

531

2023.09.20

c语言get函数的用法
c语言get函数的用法

get函数是一个用于从输入流中获取字符的函数。可以从键盘、文件或其他输入设备中读取字符,并将其存储在指定的变量中。本文介绍了get函数的用法以及一些相关的注意事项。希望这篇文章能够帮助你更好地理解和使用get函数 。

646

2023.09.20

c数组初始化的方法
c数组初始化的方法

c语言数组初始化的方法有直接赋值法、不完全初始化法、省略数组长度法和二维数组初始化法。详细介绍:1、直接赋值法,这种方法可以直接将数组的值进行初始化;2、不完全初始化法,。这种方法可以在一定程度上节省内存空间;3、省略数组长度法,这种方法可以让编译器自动计算数组的长度;4、二维数组初始化法等等。

604

2023.09.22

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

0

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8万人学习

Excel 教程
Excel 教程

共162课时 | 14.1万人学习

C# 教程
C# 教程

共94课时 | 7.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号