【WINDOWS / DOS 批处理】字符串截取

发布于:2022-11-02 ⋅ 阅读:(827) ⋅ 点赞:(0)

【字符串截取语法格式】  

% VAR:~ [ m [ ,n ] ] %

或者 

 !VAR: ~ [ m [,n ] ] !

  • [  ] (方括号)表示可选
  • 两边的 %(或  ! )为变量取值标识符
  • VAR 为变量名(不可缺少)
  • 符号 : 用于分隔变量名和说明部分
  • 符号 ~ 可以简单理解为“偏移”
  • 为 %VAR%  !VAR]! 中的字符偏移,如果从右向左,则字符的偏移从 0 始计数,即:其第一个字符的偏移是0;如果从左向右,则字符的偏移从 -1 开始计数,即:其最后一个字符的偏移是 -1),的缺省值为0。
  • 为将要截取字符串的长度,的缺省值为 0

 【语法功能】

从变量值中截取字符(串) 

1、m 的取值可以是取正整数,也可以是负整数,下面举例说明:

set "a=abcdefg"

在 %a:~m,n% 中,m的取值范围如下所示:

如果 的值大于取值范围的最大值时,则截取不到任何字符

如果 的值小于取值范围的最小值时,则 取值为最小值

        示例

:: 本示例包含汉字,如执行乱码,请使用 Notepad++ 把本文档转化成ANSI编码  【标注一】
::demo.bat
@echo off
set "a=abcdef"
echo 截取前的值: "%a%"

:: -7 小于 取值范围最小值 -6,则m取值-6
set var=%a:~-7,2%

echo 截取后的值: "%var%"

echo  ---------------------------------------------------

set "a=abcdef"
echo 截取前的值: "%a%"

:: 6 大于 取值范围最大值 5,则截取不到任何字符
set var=%a:~6,2%

echo 截取后的值: "%var%"

        运行 

C:\>demo
截取前的值: "abcdef"
截取后的值: "ab"
 ---------------------------------------------------
截取前的值: "abcdef"
截取后的值: ""
C:\>

2、的取值可以是取正整数,也可以是负整数,下面举例说明: 

%a:~m,n% 中,为正整数,则在 %a% 中,从偏移是 m 的字符(包括偏移是 m 的字符)开始,截取长度为 的所有字符。

C:\>set a=abcdefg

C:\>echo %a:~1,3%
bcd

C:\>

%a:~m,n% 中,为正整数,如果截取的长度超出 %a% 中的长度,则截取至 %a% 的末尾字符(包括末尾字符)。 

        示例

:: 本示例包含汉字,如执行乱码,请使用 Notepad++ 把本文档转化成ANSI编码  【标注一】
::demo.bat
@echo off
set "a=abcdef"
echo 截取前的值: "%a%"

:: 8 超出 %a% 的字符最大偏移(5),则截取到末尾
set var=%a:~1,8%

echo 截取后的值: "%var%"

        运行 

C:\>demo
截取前的值: "abcdef"
截取后的值: "bcdef"
C:\>

 在 %a:~m,n% 中,如果 为负整数,则被截取原字符串是除掉末尾的 -n 个字符的 %a%(而不是整个 %a%)。截取从偏移是 m 的字符(包括偏移是 m 的字符)开始,直到被截取原字符串的末尾字符(包括末尾字符)为止。

C:\>set a=abcdefg

C:\>echo %a:~0,-3%
abcd

C:\>

“ %VAR:~ [ m [ ,n ] ]% ” 中,当 n  是负整数,但该负整数的绝对值超出 %VAR% 的字符个数时,则截取不到任何字符

        示例 

:: 本示例包含汉字,如执行乱码,请使用 Notepad++ 把本文档转化成ANSI编码  【标注一】
::demo.bat
@echo off
set "a=abcdef"
echo 截取前的值: "%a%"

:: n的绝对值超出 %a% 的字符个数
set var=%a:~-1,-7%

echo 截取后的值: "%var%"

        运行 

C:\>demo
截取前的值: "abcdef"
截取后的值: ""
C:\>

3、“ %VAR:~ [ m [ ,n ] ]% ” 中,字符串截取操作发生后,VAR 的值不会改变

        示例

:: 本示例包含汉字,如执行乱码,请使用 Notepad++ 把本文档转化成ANSI编码  【标注一】
::demo.bat
@echo off
set "a=abcdef"
echo 截取前的值: "%a%"

:: 从%a%第二个字符(其偏移为1)开始,截取2个字符
set var=%a:~1,2%

echo 截取后的值: "%var%"

:: 截取操作发生后,a的值不会改变
echo a的值: "%a%" 

【标注一】   下载Notepad++      

        运行

 C:\>demo
截取前的值: "abcdef"
截取后的值: "bc"
a的值: "abcdef"
C:\>

4、“ %VAR:~ [ m [ ,n ] ]% ” 中,n 的缺省值为 0

        示例

:: 本示例包含汉字,如执行乱码,请使用 Notepad++ 把本文档转化成ANSI编码  【标注一】
::demo.bat
@echo off
set "a=abcdef"
echo 截取前的值: "%a%"

:: 从%a%第二个字符(其偏移为1)开始,截取 0 (n的缺省值是0)个字符
set var=%a:~1,%

echo 截取后的值: "%var%"

        运行

C:\>demo
截取前的值: "abcdef"
截取后的值: ""
C:\>

5、“ %VAR:~ [ m [ ,n ] ]% ” 中,m 的缺省值为 0

        示例

:: 本示例包含汉字,如执行乱码,请使用 Notepad++ 把本文档转化成ANSI编码  【标注一】
::demo.bat
@echo off
set "a=abcdef"
echo 截取前的值: "%a%"

:: 从%a%的第一个字符(m的缺省值是0)开始,截取2个字符
set var=%a:~,2%

echo 截取后的值: "%var%"

        运行

C:\>demo
截取前的值: "abcdef"
截取后的值: "ab"
C:\>

6、“ %VAR:~ [ m [ ,n ] ]% ” 中,(逗号) 都缺省时,则 的值为:从偏移是 m 的字符(包括该字符)到结尾字符(包括该字符)的所有字符的个数

        示例

:: 本示例包含汉字,如执行乱码,请使用 Notepad++ 把本文档转化成ANSI编码  【标注一】
::demo.bat
@echo off
set "a=abcdef"
echo 截取前的值: "%a%"

:: 从%a%的第二个字符(m的缺省值是0)开始,截取到结尾的所有字符
set var=%a:~1%

echo 截取后的值: "%var%"

        运行

C:\>demo
截取前的值: "abcdef"
截取后的值: "bcdef"
C:\>

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到