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

        结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值