字符串截取操作

截取字符串可以说是字符串处理功能中最常用的一个功能了,能够实现截取字符串中的特定位置的一个或多个字符。语法如下:

%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
请按任意键继续. . .

实例2:演示偏移量和长度均为负数。

@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毫秒
请按任意键继续. . .
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号