五、字符串处理

1) 分割字符串,以查看时间为例

%源字符串:~起始值,截取长度% (起始值从0开始;截取长度是可选的,如果省略逗号和截取长度,将会从起始值截取到结尾;

截取长度如果是负数,表示截取到倒数第几个。)

"%time%" 显示如:"11:04:23.03" (完整的时间"hh:mm:ss.tt")

"%time:~0,5%" 显示"hh:mm"(即"11:04"),其中0表示从右向左移位操作的个数,5表示从左向右移位操作的个数

"%time:~0,8%" 显示标准时间格式"hh:mm:ss"(即"11:04:23",前8个字符串)

"%time:~3,-3%"显示"mm:ss"(即从第4个开始,截去最后3个的字符串)

"%time:~3%" 显示"04:23.03"(即去掉前4个字符串)

"%time:~-3%" 显示".tt"(即最后3个字符串)

上面的字串分割格式,也可以用于其它地方,如目录路径:"%cd:~0,10%"

2) 替换字符串

set a="abcd1234"

echo %a% 显示:"abcd1234"

set a=%a:1=kk% 替换“1”为“kk”

echo %a% 显示:"abcdkk234"

3) 字符串合并

由于没有直接的字符串合并函数,只能用笨方法了。

set str1=%str1%%str2% (合并 str1 和 str2)

4) 计算字符串长度

没有现成的函数。如下程序利用 goto形成循环,不断将字符串截短1,并记录截短的次数,到字符串变成空时的次数即长度。

set testStr=This is a test string

:: 将 testStr 复制到str,str 是个临时字符串

set str=%testStr%

:: 标签,用于goto跳转

:next1

:: 判断str是不是空,如果不是则执行下边的语句

if not "%str%"=="" (

:: 算术运算,使num的值自增1,相当于num++或者++num语句

set /a num+=1

:: 截取字符串,每次截短1

set "str=%str:~1%"

:: 跳转到next1标签: 这里利用goto和标签,构成循环结构

goto next1

)

:: 当以上循环结构执行完毕时,会执行下边的语句

echo testStr=%testStr%

echo testStr的长度为:%num%

5) 截取字符串时,需要传递参数

直接 echo %args:~%num%,-5% 没办法想要的字符串,需要如下两步

setlocal enabledelayedexpansion

echo !args:~%num%,-5!