DOS批处理字符串截取

 更新时间:2023年06月02日 11:48:49   作者:扬科网络  
本文主要介绍了 DOS批处理字符串截取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

【字符串截取语法格式】  

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

或者 

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

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

【语法功能】

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

【关于 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:\>

【关于 n 的取值】 

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

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

2、在 %a:~m,n% 中,如果 为负整数,则先除掉 %a% 末尾的 -n 个字符的,再进行截取操作:截取从偏移是 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:\>

【关于被截取变量的值】 

“ %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 ] ]% ” 中, 和 (逗号)都缺省时,则 的值为:从偏移是 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"
截取的字符串: bc
C:\>

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

相关文章

  • bat 传递超过10个参数的情况

    bat 传递超过10个参数的情况

    批处理文件中可引用的参数为%0~%9, %0是指批处理文件的本身,也可以说是一个外部命令;%1~%9是批处理参数,也称形参;而替换形参的实参若超过了批处理文件中所规定数值(9个)且想在批处理文件中应用这些实参的话,shift命令可以帮你实现
    2014-06-06
  • 批处理杨辉三角效果实现代码

    批处理杨辉三角效果实现代码

    这篇文章主要介绍了批处理打印彩色的杨辉三角效果实现代码,喜欢的朋友可以测试下
    2014-03-03
  • 图片加密

    图片加密

    图片加密...
    2007-02-02
  • 利用批处理结合winrar轻松压缩文件

    利用批处理结合winrar轻松压缩文件

    备份数据前用WinRAR压缩一下是个不错的主意,很多喜欢bat的朋友不妨试试
    2013-08-08
  • BAT 解密工具

    BAT 解密工具

    本工具用来对混淆文本编码类型的加密批处理进行解密,在下面填入需要解密的批处理按回车键即可
    2007-08-08
  • Xcopy 复制文件和目录,包括子目录。

    Xcopy 复制文件和目录,包括子目录。

    这篇文章主要介绍了Xcopy 复制文件和目录,包括子目录,非常好用的命令行工具,的相关资料
    2007-09-09
  • 批处理bat根据星期启动程序

    批处理bat根据星期启动程序

    原来公司里的由于每次开机时启动的程序比较多,所以打算使用批处理程序,这里只列举了部分。在每周一到周五的时候,开机则启动指定的应用程序,如果是周末的两天则不启动任何程序,所以做了这个脚本。你如果需要,根据自己的情况自行修改程序
    2014-07-07
  • wget各种选项分类列表与下载

    wget各种选项分类列表与下载

    wget各种选项分类列表与下载...
    2007-03-03
  • 恢复主引导分区

    恢复主引导分区

    恢复主引导分区...
    2006-12-12
  • BAT文件语法和技巧(bat文件的编写及使用)

    BAT文件语法和技巧(bat文件的编写及使用)

    批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件
    2006-12-12

最新评论