截取字符串可以说是字符串处理功能中最常用的一个功能了,能够实现截取字符串中的特定位置的一个或多个字符。语法如下:
%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毫秒 请按任意键继续. . .