注册 登录

清河洛

BAT批处理中的字符串处理

qingheluo2020-07-03清河洛505
截取字符串name:~start[,length]start表示开始截取的位置索引,负数表示从右开始的索引length表示截取的长度,负数表示截取到字符串倒数第几位,省略截取到字符串末尾set demo=abcdefghijklmn echo %demo:~0, 5% #从索引0开始截取5个,abcde echo %demo:~-5, 4% #从倒数第5个开始截取4个,jklm echo %demo:~-4% #从倒数第4个开始截取到末尾,klmn echo %demo:~5, -4% #从索引5开始截取到倒数第4个,fghij 替换字符串name:old_str=new_str...

截取字符串

name:~start[,length]

start表示开始截取的位置索引,负数表示从右开始的索引

length表示截取的长度,负数表示截取到字符串倒数第几位,省略截取到字符串末尾

set demo=abcdefghijklmn
echo %demo:~0, 5%  #从索引0开始截取5个,abcde
echo %demo:~-5, 4%  #从倒数第5个开始截取4个,jklm
echo %demo:~-4%  #从倒数第4个开始截取到末尾,klmn
echo %demo:~5, -4%  #从索引5开始截取到倒数第4个,fghij

替换字符串

name:old_str=new_str

set demo=我今天跑步
echo %demo:今天=明天%  #我明天跑步
echo %demo:跑步=学习%  #我今天学习

字符串合并

将两个字符串放到一起就可以了

set one=我今天
set two=跑步
echo %one%%two%  #我今天跑步

扩充字符串

对表示文件路径的字符串进行特殊的处理

其中的x代表变量x,不是所有的变量都能够进行扩充的,有两个条件:

1、该字符串代表一个文件路径;

2、变量要用%x来表示,x可取a-z A-Z 0-9共62个字符中的任意一个

%~x         删除变量值中的任何引号(")
%~fx        将 %x 扩充到一个完全合格的路径名
%~dx        将 %x 扩充到一个驱动器号
%~px        将 %x 扩充到一个不含驱动器号的路径
%~nx         %x 扩充到一个文件名(不含文件扩展名)
%~xx        仅将 %x 扩充到一个文件扩展名
%~sx        扩充的路径只含有短名
%~ax        将 %x 扩充到文件的文件属性
%~tx        将 %x 扩充到文件的日期/时间
%~zx        将 %x 扩充到文件的大小
%~$PATH:x   查找列在路径环境变量的目录,并将 %x 扩充到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串

可以组合修饰符来得到多重结果:

%~dpx   仅将 %x 扩充到一个驱动器号和路径
%~nxx   仅将 %x 扩充到一个文件名和扩展名
%~fsx   仅将 %x 扩充到一个带有短名的完整路径名
%~dp$PATH:x 查找列在路径环境变量的目录,并将 %x 扩充到找到的第一个驱动器号和路径。
%~ftzax 将 %x 扩充到类似输出线路的 DIR

将一个表示文件路径的变量转换为%x表示的形式用来扩充字符串

set test=D:\mypath\tmp\file.txt
call :demo one %test% "c c"
exit
:demo
echo %0
echo %1
echo %~dp2
echo %3
pause

显示:
:demo
one
D:\mypath\tmp\
"c c"

上例中,变量test在之前是不可以扩充的,通过call命令并将test作为参数传递给子函数:deal,将test变量转换成了变量%2,即符合%x格式,从而可以进行字符串扩充。



网址导航