截取字符串可以说是字符串处理功能中最常用的一个功能了,能够实现截取字符串中的特定位置的一个或多个字符。语法如下:
%variable:~n,m%参数说明:
variable:要进行操作的变量名称,该变量中放的是字符串;
n:开始截取字符串的偏移量;如果为正数,则从左边开始;如果没有为负数,则从右边开始
m:要截取字符的个数。如果没有指定个数,则采用默认值,即变量数值的余数(余数指剩余个数,如:%variable:~-5% 当前偏移量为倒数第6,将剩下的字符全部截取)。如果两个数字 (偏移量和长度) 都是负数,使用的数字则是字符串长度加上指定的偏移量或长度(参见实例2)。
实例1:演示从左或从右截取字符串,以及截取最后的字符。
@echo off
set ifo=abcdefghijklmnopqrstuvwxyz0123456789
echo 原字符串:
echo %ifo%
rem abcde
echo 截取前5个字符:
echo %ifo:~0,5%
rem fghijklmnopqrstuvwxyz0123456789
echo 截取第六个字符直到最后一个字符
echo %ifo:~5%
rem 56789
echo 截取最后5个字符:
echo %ifo:~-5%
echo %ifo:~-5,5%
rem abcdefghijklmnopqrstuvwxyz01234
echo 截取第一个到倒数第6个字符:
echo %ifo:~0,-5%
rem defgh
echo 从第4个字符开始,截取5个字符:
echo %ifo:~3,5%
rem wxyz0
echo 从倒数第14个字符开始,截取5个字符:
echo %ifo:~-14,5%
pause输出结果:
原字符串:
abcdefghijklmnopqrstuvwxyz0123456789
截取前5个字符:
abcde
截取第六个字符直到最后一个字符
fghijklmnopqrstuvwxyz0123456789
截取最后5个字符:
56789
56789
截取第一个到倒数第6个字符:
abcdefghijklmnopqrstuvwxyz01234
从第4个字符开始,截取5个字符:
defgh
从倒数第14个字符开始,截取5个字符:
wxyz0
请按任意键继续. . .@echo off
set ifo=a0123456789
echo 原字符串:%ifo%
echo %ifo:~-8%
echo %ifo:~-8,-7%
echo %ifo:~-8,-6%
echo %ifo:~-8,-5%
echo %ifo:~-8,-4%
echo %ifo:~-8,-3%
echo %ifo:~-8,-2%
echo %ifo:~-8,-1%
rem error: ECHO 处于关闭状态。
echo %ifo:~-5,-5%
echo %ifo:~-5,-10%
pause输出结果:
原字符串:a0123456789
23456789
2
23
234
2345
23456
234567
2345678
ECHO 处于关闭状态。
ECHO 处于关闭状态。
请按任意键继续. . .根据上面实例可知,偏移量为字符串长度加上指定的负数偏移量(11 + -8 = 3),因此从第四个字符开始截取;如果没有指定待截取的长度,则截取到字符串末尾;如果指定的截取长度为负数,则表示将从末尾排除n个字符。如:echo %ifo:~-8,-4% 将从第四个字符串开始截取,并且排除最后4个字符,截取结果为“2345”。
实例3:拆分打印Windows的版本号。
@echo off
FOR /F "tokens=1,2,3,4" %%I IN ('VER') DO (
set Ver_Temp=%%L
)
echo Windows版本字符串:%Ver_Temp%
rem 截取版本
set Ver_Major=%Ver_Temp:~0,2%
set Ver_Minor=%Ver_Temp:~3,1%
set Ver_Build=%Ver_Temp:~-4,3%
echo Windows Version:
echo Major %Ver_Major%
echo Major %Ver_Minor%
echo Build %Ver_Build%输出结果:
Windows版本字符串:10.0.18363.900]
Windows Version:
Major 10
Major 0
Build 900实例4:获取当前时间,然后截取成“*点*分*秒*毫秒”格式。
@echo off
echo 当前时间:%time%
echo 当前时间:%time:~0,2%点%time:~3,2%分%time:~6,2%秒%time:~9,2%毫秒
pause输出结果:
当前时间:16:28:18.38
当前时间:16点28分18秒39毫秒
请按任意键继续. . .