DOS批处理命令-字符串操作
1、截取字符串
从指定变量中截取指定位置的字符串,并返回。*这个处理,并不改变变量的值
语法格式:%变量名:~开始位置,终了位置%
注:正数的时候开始位置是从0开始向右计算,负数的时候从1开始向右计算。(跳的个数为指定开始位置的绝对值)
具体有以下几种截取方式,看实例去理解用法,这个时候,我们假设有一个变量【var】,其值为【1234567890】。
①正常路线:
%var:~5,2% ⇒ 67
②无终了:
%var:~5% ⇒ 67890
③负终了:
%var:~5,-2% ⇒ 678
④负开始位置:
%var:~-6,2% ⇒ 56
⑤负开始无终了:
%var:~-6% ⇒ 567890
⑥负开始负终了:
%var:~-6,-2% ⇒ 5678
⑦没有开始:
%var:~,4% ⇒ 1234
⑧无开始无终了:
%var% ⇒ 1234567890
正常的情况下,就这几种截取的情况,完全可以根据我们业务的需要,来使用不同的方法来截取字符串。
这个字符串截取中,还是有几个规律的
A、开始位置的计算:当开始位置指定为正数的时候,我们就可以从左侧开始查找开始位置(左侧第一个字符为0)
当开始位置省略或者为0的时候,开始位置那个字符就是要截取的开始字符。
当开始位置指定为负数的时候,我们就可以从右侧开始查找指定位置(右侧第一个字符为-1)
B、终了位置的计算:当终了位置指定为正数的时候,我们就可以从上述计算得到的终了位置查找终了位置(开始位置为1)
当终了位置省略或者为0的时候,字符串的终了位置就是要截取字符串的终了位置
当终了位置指定为负数的时候,我们就可以从右侧开始查找指定位置(右侧第一个字符为0)
C、最终截取的字符串就是开始位置到终了位置之间的字符串(包括开始位置和终了位置)
------------------------------------------------------------------------------------------------------------------------------------------------------
但是,这个字符串截取是不是有异常发生呢?有,也没有。
当要截取的字符串不为空,并且,要截出的字符串不不能正常截出的时候,返回结果就是空值。
当要截取的字符串本身就是空的时候,取得结果就是【~开始位置,终了位置】,也就是命令的一部分被返回出来。
接下来继续讨论这个问题,既然要截取的字符串为空的时候,解出来的东西乖乖的,那我们能不能不让它进去呢?当然,我们使用我们已知的字符串判断函数就是可以的。
例如下面代码的处理:
@echo off set var= IF DEFINED var ( echo DEFINED echo %var:~1,1% ) else ( echo NOT DEFINED )
运行结果为:
F:\tmp>a.bat
NOT DEFINED
可见,当var为空的时候,分支根本就没有走进去。程序显然没有走进去,
当分歧没有进去的时候,在该分歧内,我即使写不合法的命令,也不会报错的,不信你可以试试,反正我是试过了。
但是,下面这一点,就有点费解了,且看代码:
@echo off set var= IF DEFINED var ( echo DEFINED IF %var:~1,1% EQU A ( echo true ) ) else ( echo NOT DEFINED )
这个时候,红色字体部分虽然跑不到,但是,竟然跑不过,所以,我就郁闷了。(报1的使用方法不对。--1 の使い方が誤っています。)
batch程序的执行方式是什么的?不知道,想知道,但是,又不知道到哪里知道去。
2、字符串替换
字符串替换,就是把某一字符串中的特定字符或字符串替换为给定的字符串
语法结构:%变量名:替换前=替换后%
替换前不可以为空,但是,替换后可以为空
还有一点,变换前和变换后不能用变量表示,而变量名只能有变量名来表示。
例:%var:123=abc%
3.字符串拼接,直接将两个字符串放到一块儿就可以了。
例如:字符串123和abc拼接,那么就可以写成123abc
如果是字符串变量123和abc拼接,那么就可以写成%123%%abc%
4、字符串查找,例如,查找字符串345在字符串123456789123456789中位置
哈哈,这个我还不知道,以后知道了再补上去。如果系统没有给出方法的话,就只能写方法查找了。