DOS批处理字符串截取

2023-12-05 0 946
目录
  • 【字符串截取语法格式】
  • 【语法功能】
  • 【关于m的取值】
  • 【关于n的取值】
  • 【关于被截取变量的值】
  • 【关于缺省值】
  • 【在变量延迟展开中使用字符串截取】

【字符串截取语法格式】

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

或者

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

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

【语法功能】

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

【关于m的取值】

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

set \”a=abcdefg\”

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

DOS批处理字符串截取

  • 如果m的值大于取值范围的最大值时,则截取不到任何字符
  • 如果m的值小于取值范围的最小值时,则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:\\>

【关于n的取值】

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

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

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

DOS批处理字符串截取

在 %a:~m,n% 中,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:\\>

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

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

DOS批处理字符串截取

“%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:\\>

【关于被截取变量的值】

“%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:\\>

【关于缺省值】

1、“%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:\\>

2、“%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:\\>

3、“%VAR:~ [ m [ ,n ] ]%”中, n 和,(逗号)都缺省时,则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:\\>

【在变量延迟展开中使用字符串截取】

示例

:: 本示例包含汉字,如执行乱码,请使用 Notepad++ 把本文档转化成ANSI编码 【标注一】
::demo.bat
@echo off
setlocal enableDelayedExpansion
set \”a=abcdef\”
echo 截取前的值: \”!a!\”
:: 从 !a! 的第二个字符,截取长度为 2 的所有字符
set var=!a:~1,2!
echo 截取后的值: \”%var%\”

运行

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

【注意】

字符串的截取操作在引用变量的地方均可以,并不一定必须要有set命令

示例

:: 本示例包含汉字,如执行乱码,请使用 Notepad++ 把本文档转化成ANSI编码 【标注一】
::demo.bat
@echo off
setlocal enableDelayedExpansion
set \”a=abcdef\”
echo 截取前的值: \”!a!\”
::使用echo命令直接输出截取的字符串
:: 从 !a! 的第二个字符,截取长度为 2 的所有字符
echo 截取的字符串: !a:~1,2!

运行

C:\\>demo截取前的值: "abcdef"截取的字符串: bcC:\\>

到此这篇关于DOS批处理字符串截取的文章就介绍到这了,更多相关批处理字符串截取内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!

您可能感兴趣的文章:

  • 批处理字符串截取的实现
  • BAT批处理实现字符串截取功能
  • BAT批处理中的字符串处理详解(字符串截取)
  • 分享dos批处理命令的一些使用技巧(截取字符串)
  • 批处理BAT替换与截取字符串的用法t1=%a:~3%是什么意思
  • 字符串截取功能批处理

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 DOS/BAT DOS批处理字符串截取 https://www.u-9.cn/jiaoben/dosbat/100222.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务