0


Windows BAT批处理字符串相关操作(字符串定义、分割、拼接、替换、切片、查找)

1. 字符串定义

使用

set

来定义字符串

@echo off
setstring1=Hello
echo %string1%

代码说明:

  1. 将字符串Hello赋值给string1的变量

2. 字符串拼接

使用

%string1%%string2%

的方式完成字符串的拼接。

@echo off
setstring1=Hello
setstring2=World
setcombined1=%string1% %string2%
setcombined2=%string1%,%string2%
setcombined3=%string1%%string2%
setcombined4=aaa%string1%bbb%string2%ccc
set"combined5=%string1%^&%string2%"echo %combined1%
echo %combined2%
echo %combined3%
echo %combined4%
echo %combined5%

代码说明:

  1. 用来连接字符串的字符串,如果包含了特殊字符则需要使用^转义,并且需要使用""括起来,特殊字符包括(但不限于):
    符号作用
    @
    
    命令行回显屏蔽符
    %
    
    批处理变量引导符
    >
    
    重定向符
    >>
    
    重定向符
    <
    
    >&
    
    <&
    
    重定向符
    |
    
    命令管道符
    ^
    
    转义字符
    &
    
    组合命令
    &&
    
    组合命令
    ||
    
    组合命令
    ""
    
    字符串界定符

3. 字符串分割

一个字符串 My-String,并且你想要将其分割为 My 和 String。

@echo off
setmy_string=My-String
for /f "tokens=1,2 delims=-" %%a in("%my_string%")do(setfirst_part=%%a
   setsecond_part=%%b
)echo First part: %first_part%
echo Second part: %second_part%

代码说明:

  1. 定义了一个名为 my_string 的变量,其值为 My-String
  2. 它使用 for /f 命令来分割这个字符串。tokens=1,2 指定了分割后的部分(tokens),delims=-指定了分隔符(delimiters)
  3. 分割后的部分被赋值给 %%a%%b,然后被存储在 first_part 和 second_part 变量中

上述例子中

delims=-

指定的是字符集作为分割符,比如:

delims=+-$#

表示字符串分割时是按

+
-
&
#

分别进行分割。
有时候可能需要一个字符串来作为分割符,可以通过如下方式实现:

@echo off
setcmd_str=REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Common Desktop"for /F "skip=2 tokens=*" %%S in('%cmd_str%')dosetstr=%%S
::set "str=Common Desktop    REG_EXPAND_SZ    %%PUBLIC%%\Desktop"

:: 利用字符串替换功能,将    REG_EXPAND_SZ    替换为#,注意这里两端各有4个空格setstr=%str:    REG_EXPAND_SZ    =#%

:: 然后再利用for /f函数,delims=# 来分割字符串for /F "tokens=1,2 delims=#" %%a in("%str%")do(setvalue_name=%%a
    setvalue=%%b
)echovalue_name="%value_name%"echovalue="%value%"

代码说明:

  1. 利用字符串替换功能,将多个字符REG_EXPAND_SZ替换为单个字符#,注意这里两端各有4个空格;
  2. :然后再利用for /f方法,delims=#来分割字符串,从而达到曲线救国的目的

4. 字符串替换

语法:

%var:old_str=new_str%

说明:使用str2来替换var变量中str1的一部分内容

@echo off
setVAR=hello
setVAR=%VAR:ell=ipp%
echo %VAR%

代码说明:

  1. 创建了一个变量VAR,它的值是“hello”。然后,使用“ell” 替换为 “ipp”。因此,脚本将输出 “hippo”。

5. 字符串切片

语法:

目标字符串=%源字符串:~起始位置,截取长度%

说明:start_index 是子串的开始位置,length 是子串的长度。索引是从0开始的,所以0表示字符串的第一个字符。

@echo off
echo %%date%%=%date%
echo %%date:~0,4%%=%date:~0,4%
echo %%date:~5,2%%=%date:~5,2%
echo %%date:~8,2%%=%date:~8,2%
echo %%date:~-2%%=%date:~-2%
echo %%date:~0,-2%%=%date:~0,-2%
echo %%date:~-8,3%%=%date:~-8,3%
echo %%date:~-8,-3%%=%date:~-8,-3%
echo %%date:~4%%=%date:~4%
echo %%date:~,4%%=%date:~,4%
echo %%date:~4,%%=%date:~4,%

输出:

%date%=2023/07/11 周二
%date:~0,4%=2023
%date:~5,2%=07
%date:~8,2%=11
%date:~-2%=周二
%date:~0,-2%=2023/07/11
%date:~-8,3%=07/
%date:~-8,-3%=07/11
%date:~4%=/07/11 周二
%date:~,4%=2023
%date:~4,%=

代码说明:

  • 起始位置: 1)起始值为 正,表示正着数,如:%date:~5,2%,表示从正着数第5个字符,往后截取2个字符(不含第5个字符); 2)起始值为 负,表示倒着数,如:%date:~-8,3%,表示从倒着数第8个字符,往后截取3个字符(含第8个字符); 3)起始值为0或空,表示从最左边开始,如:%date:~,4%%date:~0,4% 都表示从左边起始位置,截取2个字符; (起始位置如果省略,必需有个逗号占位,如果逗号省略则表示【截止长度为空】)
  • 截止长度(偏移量): 1)截止长度为 正,表示截取长度,如:%date:~8,2%,表示从正着数第8个字符,往后截取2个字符(不含第8个字符); 2)截止长度为 负,表示结束位置,如:%date:~-8,-3%,表示从倒着数第8个字符,往后截取,一直截取到倒数第3个字符的位置(含倒数第8个字符,不含倒数第3个字符); 3)截止长度为 空,表示截取到结尾位置,如:%date:~4%,表示从正着数第4个字符,往后截取所有字符(不含第4个字符); (截止长度如果省略,不能有逗号占位,否则取值为空)

6. 字符串查找

使用

echo

findstr

命令来判断是否包含一个字符串

@echo off
setVAR=hello
echo %VAR% | findstr /C:"ell">nul
if errorlevel 1(echo String not found
)else(echo String found
)

代码说明:

  1. 创建了一个变量 VAR,它的值是 “hello”。然后,使用 echo 和 findstr 命令来查找 “ell”。如果 “ell” 被找到,脚本将输出 “String found”,否则,输出 “String not found”
标签: windows batch

本文转载自: https://blog.csdn.net/B11050729/article/details/131655470
版权归原作者 小青龍 所有, 如有侵权,请联系我们删除。

“Windows BAT批处理字符串相关操作(字符串定义、分割、拼接、替换、切片、查找)”的评论:

还没有评论