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

Windows bat脚本学习四(字符串操作)

一、简介

        在使用Bat批处理的时候,经常需要对字符串进行操作,所以这里单独写一篇文章介绍一下。

二、字符串相关操作

1.字符串切片

@echo off
chcp 65001
 
set string=abcdefghijklmnopqrstuvwxyz0 12 3456789
echo %string%
echo.

echo 从第3个字符开始截取:
echo %string:~3%
echo.

echo 截取前5个字符:
echo %string:~0,5%
echo.
 
echo 截取最后5个字符:
echo %string:~-5%
echo.
 
echo 截取第一个到倒数第6个字符:
echo %string:~0,-5%
echo.
 
echo 从第4个字符开始,截取5个字符:
echo %string:~3,5%
echo.
 
echo 从倒数第14个字符开始,截取5个字符:
echo %string:~-14,5%
echo.
 
pause

        结果:

2.替换字符串

@echo off
chcp 65001
 
set string=123456789
set string=%string:456=abc%
echo %string%
echo.
 
pause

结果:

3.字符串拼接

@echo off
chcp 65001
 
set str1=123456789
set str2=abcdefghi
set str3=zzz%str1% %str2%,xxx
echo %str3%
echo.
 
pause

结果:

4.字符串分割

        delims

        该关键字告诉for每一行应该拿什么作为分隔符,默认的分隔符是空格和tab键

        例如,现在有个文件,内容如下:

        编写如下代码:

@echo off
::chcp 65001

::不做分隔符
for /f "delims=" %%i in (a.txt) do (
	echo %%i
)
echo.

::以":"作为分隔符
for /f "delims=:" %%i in (a.txt) do (
	echo %%i
)
echo. 

::以" "作为分隔符
for /f "delims= " %%i in (a.txt) do (
	echo %%i
)
echo.

::以","作为分隔符
for /f "delims=," %%i in (a.txt) do (
	echo %%i
)
echo.

::以"\"作为分隔符
for /f "delims=\" %%i in (a.txt) do (
	echo %%i
)
echo.

pause

结果:

        需要注意的是,如果以第一个字符作为分隔符,相当于获取该字符之后的内容。参考“以:作为分隔符”

        

        tokens

       该关键字用来选取第几个元素默认以空格和TAB作为分隔

        该关键字如果搭配delims使用。通过delims将每一行分为更小的元素时,有token来控制要取哪一个或哪几个。

        修改一下a.txt文件

        执行如下代码:

@echo off
chcp 65001

echo 选取所有元素
for /f "tokens=*" %%i in (a.txt) do (
	echo %%i
)
echo.


echo 选取每行第二个元素(默认以空格或tab为分隔)
for /f "tokens=2" %%i in (a.txt) do (
	echo %%i
)
echo.

echo 选取每行第二、第四个元素(默认以空格或tab为分隔)
for /f "tokens=2,4" %%i in (a.txt) do (
	echo %%i %%j
)
echo.

echo 选取每行第二-四个元素(默认以空格或tab为分隔)
for /f "tokens=2-4" %%i in (a.txt) do (
	echo %%i %%j %%k
)
echo.

echo 选取每行第二、第四个元素(以,作为分隔)
for /f "tokens=2,4 delims=," %%i in (a.txt) do (
	echo %%i %%j
)
echo.



pause

结果:

        skip

        忽略文件的前几行

        还是刚才的a.txt。

        如下代码:

@echo off
chcp 65001

echo 选取所有元素
for /f "tokens=*" %%i in (a.txt) do (
	echo %%i
)
echo.

echo 选取每行第二个元素(默认以空格或tab为分隔)
for /f "tokens=2" %%i in (a.txt) do (
	echo %%i
)
echo.

echo 跳过前两行,选取每行第二个元素(默认以空格或tab为分隔)
for /f "skip=2 tokens=2" %%i in (a.txt) do (
	echo %%i
)
echo.


pause

        结果:

        分割多份

         看如下代码:

@echo off
chcp 65001

::延迟环境变量扩展,不明白的看这个文章:https://blog.csdn.net/qq_26226375/article/details/122882619
setlocal enabledelayedexpansion

echo 定义如下字符串
set str=1,2,3,4,5,6,7
echo %str%
echo.

echo 将字符串以,进行分割,取第2-5个元素
echo.
for /f "tokens=2-5 delims=," %%a in ("%str%") do (
	set part2=%%a
	set part3=%%b
	set part4=%%c
	set part5=%%d
	set part6=%%e
)

echo part2:!part2!
echo part3:!part3!
echo part4:!part4!
echo part5:!part5!
echo part6:!part6!
echo 因为tokens只取了2-5个元素,并未取第6个元素,所以part6=%%e赋值是错误的。
echo.

endlocal
pause

        结果:

findstr

        在文件中查找特定的字符串。如果搜索到,则打印出行内容。

find 参数 "要查找的字符串" 路径+文件名

参数
/i:不区分大小写的搜索
/n:打印匹配行的行号
/s:在当前目录及其所有子目录中搜索
/v:反向搜索,只打印不包含指定字符串的行
/r:使用正则表达式搜索

        创建一个文件:

        编写如下代码:

@echo off
chcp 65001

::延迟环境变量扩展,不明白的看这个文章:https://blog.csdn.net/qq_26226375/article/details/122882619
setlocal enabledelayedexpansion

echo 查找含有AA的字符串行,默认区分大小写
findstr "AA" a.txt
echo.

echo 查找含有BB的字符串行,不区分大小写
findstr /i "BB" a.txt
echo.

echo 查找含有CC的字符串行,并打印行号,不区分大小写
findstr /i /n "CC" a.txt
echo.

echo 查找含有DD的字符串行,不区分大小写
for /f "delims=" %%a in ('findstr /i /n "DD" a.txt') do (
	set ret=%%a
)
echo !ret!
echo.

set first_char=%ret:~0,1%
echo 行号:%first_char%
echo.

endlocal
pause

        结果:


http://www.kler.cn/news/283515.html

相关文章:

  • 时序预测 | 基于VMD-SSA-LSSVM+LSTM多变量时间序列预测模型(Matlab)
  • 数据库视图的使用
  • Linux - 深入探讨 Linux `ls` 命令:一个全面的技术指南
  • Leetcode3238. 求出胜利玩家的数目
  • 2022 年高教社杯全国大学生数学建模竞赛-C 题 古代玻璃制品的成分分析与鉴别详解+分类模型Python代码源码
  • Oracle 12c 多节点集群剔除节点操作
  • 【bug】可图文生图模型 KolorsPipeline IndexError: list index out of range
  • 足球联赛|基于SprinBoot+vue的足球联赛管理系统(源码+数据库+文档)
  • 基于深度学习的金属锈蚀检测系统详细实施指南
  • 物料信息库管理杂谈
  • 卡尔曼滤波算法(c语言代码)
  • Google play应用老包突然被暂停和删除了,什么原因?
  • 编织网络之魂:Ruby网络编程指南
  • 打卡第58天------图论
  • 『功能项目』技能爆炸与伤害数值显示【13】
  • Android如何高效的加载大型位图
  • 第J1周:ResNet-50算法实战与解析(TensorFlow版)
  • 数据结构(邓俊辉)学习笔记】串 04——KMP算法:查询表
  • Cmake教程之二(添加一个库)
  • 网创教程自动采集wordpress插件子比主题
  • 提升可执行文件exe为管理员权限
  • 如何从头开始编写一个简单的 RPC 协议(手写 Dubbo 的自定义协议)
  • 数据库:笔记02.关系数据库
  • 刘海屏的优雅回归?华为Mate 70 Pro定义新美学
  • linux 云主机下载 rpm 包安装 oracle java jdk21 实录(华为云 EulerOS)
  • 《黑神话:悟空》爆火,对程序员的 5 点启示(2)
  • RPA自动化流程机器人:企业财务自动化的未来趋势
  • ChatTTS容器构建教程
  • C++基础知识:关系运算符重载以及相关代码演示
  • Java基础(5)- Java代码笔记2