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格式,从而可以进行字符串扩充。