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中位置

哈哈,这个我还不知道,以后知道了再补上去。如果系统没有给出方法的话,就只能写方法查找了。

 

posted @ 2013-07-30 17:01  鸿鹰  阅读(12162)  评论(0编辑  收藏  举报