BAT批处理中的字符串处理详解(字符串截取)
原⽂地址:
批处理有着具有⾮常强⼤的字符串处理能⼒,其功能绝不低于C语⾔⾥⾯的字符串函数集。批处理中可实现的字符串处理功能有:截取字符串内容、替换字符串特定字段、合并字符串、扩充字符串等功能
下⾯对这些功能⼀⼀进⾏讲解。
  1、截取字符串
  截取字符串可以说是字符串处理功能中最常⽤的⼀个⼦功能了,能够实现截取字符串中的特定位置的⼀个或多个字符。举例说明其基本功能:
复制代码代码如下:
  @echo off
  set ifo=abcdefghijklmnopqrstuvwxyz0123456789
  echo 原字符串(第⼆⾏为各字符的序号):
  echo %ifo%
  echo 123456789012345678901234567890123456
  echo 截取前5个字符:
  echo %ifo:~0,5%
  echo 截取最后5个字符:
  echo %ifo:~-5%
  echo 截取第⼀个到倒数第6个字符:
  echo %ifo:~0,-5%
  echo 从第4个字符开始,截取5个字符:
  echo %ifo:~3,5%
  echo 从倒数第14个字符开始,截取5个字符:
  echo %ifo:~-14,5%
  pause
  当然,上⾯的例⼦只是将字符串处理的基本功能展⽰出来了,还看不出字符串处理具体有什么⽤处。下⾯这个例⼦是对时间进⾏处理。
复制代码代码如下:
  @echo off
  echo 当前时间是:%time% 即 %time:~0,2%点%time:~3,2%分%time:~6,2%秒%time:~9,2%厘秒
  pause
2、替换字符串
  替换字符串,即将某⼀字符串中的特定字符或字符串替换为给定的字符串。举例说明其功能:
复制代码代码如下:
  @echo off
  set aa=伟⼤的中国!我为你⾃豪!
  echo 替换前:%aa%
  echo 替换后:%aa:中国=中华⼈民共和国%
  echo aa = %aa%
  set "aa=%aa:中国=中华⼈民共和国%"
  echo aa = %aa%
  pause
  对于上⾯的例⼦有⼀点说明,对⽐两个echo aa = %aa%可以发现,如果要修改变量aa的内容的话,就需要将修改结果“%aa:中国=中华⼈民共和国%”赋值给变量aa。上⾯的字符串截取也有着同样的特点。
3、字符串合并
  其实,合并字符串就是将两个字符串放在⼀起就可以了。举例说明:
复制代码代码如下:
  @echo off
  set aa=伟⼤的中国!
  set bb=我为你⾃豪!
  echo %aa%%bb%
  echo aa=%aa%
  echo bb=%bb%
  set "aa=%aa%%bb%"
  echo aa=%aa%
  pause
  同样,如果要改变变量aa的内容的话,就需要将合并结果“%aa%%bb%”赋值给变量aa。
4、扩充字符串
  “扩充”这个词汇来⾃于微软⾃⼰的翻译,意思就是对表⽰⽂件路径的字符串进⾏特殊的处理,具体功能罗列如下:
  =========================================
  ~I - 删除任何引号("),扩充 %I
  %~fI - 将 %I 扩充到⼀个完全合格的路径名
  %~dI - 仅将 %I 扩充到⼀个驱动器号
  %~pI - 仅将 %I 扩充到⼀个路径
  %~nI - 仅将 %I 扩充到⼀个⽂件名
  %~xI - 仅将 %I 扩充到⼀个⽂件扩展名
  %~sI - 扩充的路径只含有短名
  %~aI - 将 %I 扩充到⽂件的⽂件属性
  %~tI - 将 %I 扩充到⽂件的⽇期/时间
  %~zI - 将 %I 扩充到⽂件的⼤⼩
  %~$PATH:I - 查列在路径环境变量的⽬录,并将 %I 扩充
  到到的第⼀个完全合格的名称。如果环境变量名
  未被定义,或者没有到⽂件,此组合键会扩充到
  空字符串
  可以组合修饰符来得到多重结果:
  %~dpI - 仅将 %I 扩充到⼀个驱动器号和路径
  %~nxI - 仅将 %I 扩充到⼀个⽂件名和扩展名
  %~fsI - 仅将 %I 扩充到⼀个带有短名的完整路径名
  %~dp$PATH:i - 查列在路径环境变量的⽬录,并将 %I 扩充
  到到的第⼀个驱动器号和路径。
  %~ftzaI - 将 %I 扩充到类似输出线路的 DIR
  =========================================
  以上内容引⽤于for /?帮助信息。其中的I代表变量I,不过需要说明的是,不是所有的变量都能够进⾏扩充的,有两个条件:1、该字符串代表⼀个⽂件路径;2、变量要⽤%x来表⽰,x可取a-z A-Z 0-9共62个字符中的任意⼀个。举例说明:
复制代码代码如下:
  @echo off
  echo 正在运⾏的这个批处理:
  echo 完全路径:%0
  echo 去掉引号:%~0
  echo 所在分区:%~d0
  echo 所处路径:%~p0
  echo ⽂件名:%~n0
  echo 扩展名:%~x0
  echo ⽂件属性:%~a0
  echo 修改时间:%~t0
  echo ⽂件⼤⼩:%~z0
  pause
  其中的%0是批处理⾥⾯的参数,代表当前运⾏的批处理的完全路径。类似的还有%1-%9,分别代表传递来的第1-9个参数。例⼦如下:
复制代码代码如下:
  @echo off
  set aa=C:\Windows\PPP\a.btx
  call :deal aaa %aa% "c c" ddd eee
  pause>nul
  exit
  :deal
  echo %%0 = %0
  echo %%1 = %1
  echo %%2 = %2
  echo %%3 = %3
  echo %%4 = %4
  echo %%5 = %5
  其中,变量aa在之前是不可以扩充的,通过call命令并将aa作为参数传递给⼦函数:deal,将aa变量转换成了变量%1,即符合%x格式,从⽽可以进⾏字符串扩充。
  ⾄于%x中x取a-z A-Z的形式,可以复习⼀下for语句,for语句⾥⾯的变量就是⽤%x来表⽰的,因⽽可以直接进⾏扩充。下⾯是其它⽹友的补充:注意是与c语⾔做了⼀些对⽐
⾸先说⼀下,批处理和⾼级语⾔不同,没有字符串处理函数,⽐如strcat之类的,但是却可以利⽤环境变量来实现这些函数的功能。
本⽂对照C语⾔中的字符串处理函数,讲解在批处理中的实现⽅法。
⾸先说⼀下字符串的存储,在C语⾔中,采⽤字符数组或者字符指针来存储字符串,⽽BAT中没有这些东东,所以要依靠环境变量来存储。
设置环境变量的语句为set语句,本⽂不详细介绍了,参考set /?语句。
1、C语中的strcpy函数,将⼀个字符串复制到另⼀个字符型指针或字符数组,覆盖原来的字符串。
C语⾔中的调⽤⽅法:strcpy(⽬标字符串,源字符串)
在批处理中的实现⽅法:
set ⽬标字符串=%源字符串%
⽰例:
复制代码代码如下:
@echo off
::关闭屏幕回显(可选)
set str1=This is old string
::设置str1中存储的字符串,注意没有双引号,这点与C语⾔等不同!
set str2=This is new string
::设置str2中存储的字符串
echo 执⾏字符串拷贝以前:
echo str1=%str1%
echo str2=%str2%
::先输出⼀次原有的字符串
set str1=%str2%
::字符串拷贝
echo 执⾏字符串拷贝以后:
echo str1=%str1%
echo str2=%str2%
::输出执⾏完字符串拷贝后的字符串
echo 输出完毕,按任意键退出&&pause>nul&&exit
::输出信息,当⽤户按任意键时,结束该批处理。
2、C语中的strcat函数,将⼀个字符串连接到另⼀个字符型指针或字符数组的末尾。
C语⾔中的调⽤⽅法:strcat(⽬标字符串,源字符串)批处理文件怎么做
在批处理中的实现⽅法:
set ⽬标字符串=%⽬标字符串%%源字符串%
⽰例:
复制代码代码如下:
@echo off
set str1=This is string1
set str2=This is string2
::设置str1和str2中存储的字符串
echo 连接字符串以前:
echo str1=%str1%
echo str2=%str2%
::先输出⼀次原有的字符串
set str1=%str1%%str2%
::字符串连接
echo 连接字符串以后:
echo str1=%str1%
echo str2=%str2%
::输出执⾏完字符串连接后的两个字符串
echo 输出完毕,按任意键退出&&pause>nul&&exit
3、字符串截取,C中没有这种函数,不过可以通过语句实现,不再介绍,直接说批处理的。set ⽬标字符串=%源字符串:~起始值,截取长度%
注意,起始值从0开始!
截取长度是可选的,如果省略逗号和截取长度,将会从起始值⼀直截取到字符串的结尾。
⽰例:
复制代码代码如下:
@echo off
set str1=This is string1
::设置str1中存储的字符串
set str2=%str1:~8,6%
set str3=%str1:~0,4%
set str4=%str1:~5%
::字符串截取
echo 原字符串:
echo str1=%str1%
echo 截取得到的字符串:
echo str2=%str2%
echo str3=%str3%
echo str4=%str4%
::输出执⾏结果
echo 输出完毕,按任意键退出&&pause>nul&&exit
4、C语中的strlen函数,取得字符串的长度。
C语⾔中的调⽤⽅法:strlen(字符串)
在批处理中的实现⽅法是利⽤goto和标签,形成循环结构,不断将字符串截短1字符,并⽤变量记录截短的次数,直到字符串变成空串。
⽰例:
复制代码代码如下:
@echo off
set str1=This is a test string
set str2=Hello World
::设置两个字符串
set str=%str1%
::将str1复制到str
:next1
::标签,⽤于goto跳转
::注意与注释语句的区别,注释⽤两个冒号开头,标签则为⼀个冒号
if not "%str%"=="" (
:
:判断str是不是空串,如果不是则执⾏下边的语句
set /a num+=1
::算术运算,使num的值⾃增1,相当于num++或者++num语句
set "str=%str:~1%"
::截取字符串,赋给⾃⾝
goto next1
::跳转到next1标签
::这⾥利⽤goto和标签,构成循环结构
)
::当以上循环结构执⾏完毕时,会执⾏下边的语句
echo str1=%str1%
echo str1的长度为:%num%
::输出结果
set num=0
::将记和⽤的环境变量num置0,以便开始下⼀次运算。
set str=%str2%
::将str2复制到str
:next2
::定义⼀个新的标签

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。