字符串截取
**********************************************
截取功能统⼀语法格式为:%a:~[m[,n]]%
**********************************************
⽅括号表⽰可选,%为变量标识符,a为变量名,不可少,冒号⽤于分隔变量名和说明部分,符号~可以简单理解为“偏移”即可,m为偏移量(缺省为0),n为截取长度(缺省为全部)
%PATH:~10,5% 这个什么意思,看例⼦:
截取功能例⼦1:
@echo off
set a=bbs.verybat
set var=%a:~1,2%
echo %var%
pause
执⾏后,我们会发现只显⽰了"bs"两个字母,我们的变量%a%的值不是为bbs.verybat吗?
怎么只显⽰了第2个字母和第3个字母"bs",分析⼀结果我们就可以很容易看出
%a:~10,5%就是显⽰变量a⾥从11位(偏移量10)开始的5个字符!
分析set var=%a:~1,2%
set是命令,var是变量值,a要进⾏字符操作的变量,"1"从变量"a"第⼏位开始显⽰,"2"表⽰显⽰⼏位。
合起来就是把变量a的值从第2位(偏移量1)开始,把2个字符赋予给变量var
这样应该明⽩了吧~
其他两种语法
%PATH:~-10%
%PATH:~0,-2%
他们也是显⽰指定变量指定⼏位的值的意思
%PATH:~-10% 看例⼦
截取功能例⼦2:
@echo off
set a=bbs.verybat
set var=%a:~-3%
echo %var%
pause
运⾏结果:
这个就是把变量a倒数3位的值给变量VAR
当然我们也可以改成这样
截取功能例⼦3:
@echo off
set a=bbs.verybat
set var=%a:~3%
echo %var%
pause
运⾏显⽰:.verybat
这个就是把变量a的从第3位开始后⾯全部的值给变量VAR
%PATH:~0,-2% 例⼦
截取功能例⼦4:
@echo off
set a=bbs.verybat
set var=%a:~0,-3%
echo %var%
pause
执⾏后,我们发现显⽰的是"bbs.verybat",少了""
从结果分析,很容易分析出,这是把变量a的值从0位开始,
到倒数第三位之间的值全部赋予给var
如果改成这样
截取功能例⼦5:
@echo off
set a=bbs.verybat
set var=%a:~2,-3%
echo %var%
pause
运⾏显⽰:s.verybat
那么他就是显⽰从第3位(偏移量2)开始减去倒数三位字符的值,并赋予给变量var
讲得好,例⼦就是说明问题,为便于记忆,龙卷风⼩节如下:
a=bbs.verybat
%a:~1,2% =“bs” 偏移量1,从第⼆位开始向右取2位
怎么截取列表中的字符串%a:~-3% =“” 偏移量负3,即倒数3位(也可理解为留下右边3位),右取全部
%a:~3% =“.verybat” 偏移量3(也可理解为去掉左边3位),右取全部
%a:~0,-3% =“bbs.verybat” 偏移量0,右取长度⾄负3,即倒数3位
%a:~2,-3% =“s.verybat” 偏移量2,右取长度⾄负3,即倒数3位
**********************************************
所以,截取功能统⼀语法格式为:%a:~[m[,n]]%
**********************************************
⽅括号表⽰可选,%a%为变量名,不可少,冒号⽤于分隔变量名和说明部分,符号~可以简单理解为“偏移”即可,m为偏移量(缺省为0),n为截取长度(缺省为全部)
上⾯所述⽤法其实相当于vbs函数mid、left、right
%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位开始取右边全部。
思考题⽬:输⼊任意字符串,求字符串的长度
参考答案:
@echo off
set /p str=请输⼊任意长度的字符串:
echo你输⼊了字符串:"%str%"
call :stringlenth "%str%" num
echo字符串长度为:%num%
pause
exit
:StringLenth
::---------字符串长度计算⼦程序
:
:---------参数%1为字符串(如有空格,请⽤引号括起来)
::---------参数%2为返回变量名称,不能含空格或特殊字符
::@echo off
set theString=%~1
if not defined theString goto :eof
set Return=0
:StringLenth_continue
set /a Return+=1
set thestring=%thestring:~0,-1%
if defined thestring goto StringLenth_continue
if not "%2"=="" set %2=%Return%
goto :eof
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论