BAT脚本的字符串处理

2018年05月12日 15:10:35

阅读数:135

一、在BAT中中文乱码

在CMD中,一般输入中文会出现乱码,因为cmd对中文的编码格式为ANSI编码,所以如果想让bat脚本显示中文,便需将其编码格式转为ANSI。

如下图:

将其编码格式改为ANSI以后:

二、对字符串的截取

@echo off

set abc=hello world, this string come from bat

echo 原字符串为:%abc%

echo 截取前5个字符:%abc:~0,5%

echo 截取最后5个字符:%abc:~-5%

echo 截取第一个到倒数第6个字符:%abc:~1,-5%

echo 从第4个字符开始截取5个字符:%abc:~3,5%

echo 从倒数第14个字符开始截取5个字符:%abc:~-14,5%

代码运行结果:

三、对字符串的替换

@echo off

set aa=你好!世界

echo 替换前:%aa%

echo 替换后:%aa:世界=中国%

echo aa=%aa%

echo %aa%

set aa=%aa:世界=中国%

echo aa=%aa%

代码运行结果:

四、字符串的合并

@echo off

set aa=你好!

set bb=世界

echo %aa%%bb%

echo aa=%aa%

echo bb=%bb%

set "aa=%aa%%bb%"

echo aa=%aa%

运行结果:

如上图所示,在bat脚本中,为了让脚本可以更好地识别字符串的开始与结束,最好用“”来将字符串进行标注,类似于()的功能,表示该字符串为一个字符串。

五扩充字符串

“扩充”这个词汇来自于微软自己的翻译,意思就是对表示文件路径的字符串进行特殊的处理,具体功能罗列如下:

=========================================

~I - 删除任何引号("),扩充 %I

%~fI - 将 %I 扩充到一个完全合格的路径名

%~dI - 仅将 %I 扩充到一个驱动器号

%~pI - 仅将 %I 扩充到一个路径

%~nI - 仅将 %I 扩充到一个文件名

%~xI - 仅将 %I 扩充到一个文件扩展名

%~sI - 扩充的路径只含有短名

%~aI - 将 %I 扩充到文件的文件属性

%~tI - 将 %I 扩充到文件的日期/时间

%~zI - 将 %I 扩充到文件的大小

%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串可以组合修饰符来得到多重结果:

%~dpI - 仅将 %I 扩充到一个驱动器号和路径

%~nxI - 仅将 %I 扩充到一个文件名和扩展名

%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名

%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个驱动器号和路径。

%~ftzaI - 将 %I 扩充到类似输出线路的 DIR

=========================================

以上内容引用于for /?帮助信息。其中的I代表变量I,不过需要说明的是,不是所有的变量都能够进行扩充的,有两个条件:1.该字符串代表一个文件路径;2.变量要用%x来表示,x可取a-z A-Z 0-9共62个字符中的任意一个。举例说明:

=========================================

@echo off

echo 正在运行的这个批处理:

echo 完全路径:%0

echo 去掉引号:%~0

echo 所在分区:%~d0

echo 所处路径:%~p0

echo 文件名:%~n0

echo 扩展名:%~x0

echo 文件属性:%~a0

echo 修改时间:%~t0

echo 文件大小:%~z0

pause

=========================================

其中的%0是批处理里面的参数,代表当前运行的批处理的完全路径。类似的还有%1-%9,分别代表传递来的第1-9个参数。例子如下:

===============================================

@echo off

set aa=C:\Windows\PPP\a.btx

call :deal aaa %aa% "c c" ddd eee

pause>nul

exit

:deal

echo %%0 = %0

echo %%1 = %1

echo %%2 = %2

echo %%3 = %3

echo %%4 = %4

echo %%5 = %5

===============================================

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

至于%x中x取a-z A-Z的形式,可以复习一下for语句,for语句里面的变量就是用%x来表示的,因而可以直接进行扩充。

本页共90段,2182个字符,4114 Byte(字节)