gpt4 book ai didi

批处理中字符串分割实现代码

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章批处理中字符串分割实现代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

批处理 字符串分割 实例 。

使用for命令可以对字符串进行分段处理.

分割字符串 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@ echo off
::定义一个以分号作为分隔的字符串
set str=AAA;BBB;CCC;DDD;EEE;FFF
::str的副本
set remain=%str%
:loop
for /f "tokens=1* delims=;" %%a in ( "%remain%" ) do (
     ::输出第一个分段(令牌)
     echo %%a
     rem 将截取剩下的部分赋给变量remain,其实这里可以使用延迟变量开关
     set remain=%%b
)
::如果还有剩余,则继续分割
if defined remain goto :loop
pause

主要解释for语句

delims=;表示以分号作为分隔符,对remain字符串进行分割处理。 tokens=1*,tokens表示分段的方式,tokens=1*表示第一个分隔符;之前的作为一部分,剩下的(*表示)作为一部分。这两部分在循环体总可以用%%a表示第一部分,%%b表示第二部分.

批处理 遍历path环境变量 。

我们知道path环境变量也是以分号作为分隔符的,批处理中,所以同样可以用上面的代码来遍历path环境变量.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@ echo off
setlocal enabledelayedexpansion
::定义一个以分号作为分隔的字符串
set str=%path%
::str的副本
set remain=%str%
:loop
for /f "tokens=1* delims=;" %%a in ( "%remain%" ) do (
     ::输出第一个分段(令牌)
     echo %%a
     rem 将截取剩下的部分赋给变量remain,其实这里可以使用延迟变量开关
     set remain=%%b
)
::如果还有剩余,则继续分割
if defined remain goto :loop
pause

运行结果

D:\dev\workspace\MarkdownTools ...... C:\windows\system32 D:\dev\java\jdk1.8.0_91\bin F:\Program Files\nodejs\node_global F:\Program Files\Git\bin D:\dev\apache-maven-3.5.4\bin ...... 请按任意键继续. . . 。

批处理 判断path环境变量中是否有某个目录 。

例如查找系统path环境变量中是否存在D:\dev\workspace\MarkdownTools这个目录

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@ echo off
setlocal enabledelayedexpansion
::定义一个以分号作为分隔的字符串
:: set str=AAA;BBB;CCC;DDD;EEE;FFF
set str=%path%
::str的副本
set remain=%str%
set toFind=D:\dev\workspace\MarkdownTools
set isFind=false
:loop
for /f "tokens=1* delims=;" %%a in ( "%remain%" ) do (
     if "%toFind%" == "%%a" (
         ::设置标记,以便后续使用
         set isFind=true
         ::找到了就不找了
         goto :finded
     )
     rem 将截取剩下的部分赋给变量remain,其实这里可以使用延迟变量开关
     set remain=%%b
)
::如果还有剩余,则继续分割
if defined remain goto :loop
:finded
echo %isFind%
pause

运行结果

true 。

请按任意键继续. . . 。

参考资料 。

最近有有个小需求需要将shell 脚本的功能挪到windows中,但发现shell中有数组概念,但windows中却没有,同时shell中有很多方式处理字符串分割,但bat中就显得比较鸡肋,经过一番查找,终于有了方案(Stack Overflow:http://stackoverflow.com/questions/1707058/how-to-split-a-string-in-a-windows-batch-file):

方案: 通过for循环处理,而处理的方式又可以分两种,一种是普通for,一种是for的文件处理方式:

方案一:

?
1
2
3
4
5
@ echo off & setlocal
rem 注意这里的s定义,其值不是使用双引号引起来的
rem also works for comma -separated lists, e.g. ABC,DEF,GHI,JKL
set s=AAA BBB CCC DDD EEE FFF
for %%a in (%s%) do echo %%a

方案二:is the best for (most) arbitrary delimiter characters. 。

?
1
2
3
4
5
6
7
8
9
10
@ echo off & setlocal
set s=AAA BBB CCC DDD EEE FFF
set t=%s%
:loop
for /f "tokens=1*" %%a in ( "%t%" ) do (
  echo %%a
  rem 将截取剩下的部分赋给t,其实这里可以使用延迟变量开关
  set t=%%b
  )
if defined t goto :loop

有个老兄给了个更完整的(用到了延迟变量):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@ echo off
setlocal ENABLEDELAYEDEXPANSION
 
REM Set a string with an arbitrary number of substrings separated by semi colons
set teststring=The;rain;in;spain
 
REM Do something with each substring
:stringLOOP
  REM Stop when the string is empty
  if "!teststring!" EQU "" goto END
 
  for /f "delims=;" %%a in ( "!teststring!" ) do set substring=%%a
 
   REM Do something with the substring -
   REM we just echo it for the purposes of demo
   echo !substring!
 
REM Now strip off the leading substring
:striploop
  set stripchar=!teststring:~0,1!
  set teststring=!teststring:~1!
 
  if "!teststring!" EQU "" goto stringloop
 
  if "!stripchar!" NEQ ";" goto striploop
 
  goto stringloop
)
 
:END
endlocal

还有这样的:

?
1
2
3
4
set input=AAA BBB CCC DDD EEE FFF
set nth=4
for /F "tokens=%nth% delims= " %%a in ( "%input%" ) do set nthstring=%%a
echo %nthstring%

其实Powershell里可能有更多的内置函数可以使用:

PS C:\> "AAA BBB CCC DDD EEE FFF".Split() 。

还有人提出用vbscrip代替bat:

?
1
2
3
4
5
6
7
8
9
10
Set objFS = CreateObject( "Scripting.FileSystemObject" )
Set objArgs = WScript.Arguments
str1 = objArgs(0)
s=Split(str1, " " )
For i=LBound(s) To UBound(s)
  WScript.Echo s(i)
  WScript.Echo s(9) ' get the 10th element
Next
usage:
c:\test> cscript /nologo test.vbs "AAA BBB CCC"

最后来一个bat中的小难点: 变量延迟(自上而下,逐条(简单语句、复合语句(for、if 语句块只算一条))执行,而非逐行执行) 。

变量延迟详解 call setlocal 。

以上就是批处理中字符串分割实现代码的详细内容,更多关于批处理字符串分割的资料请关注我其它相关文章! 。

原文链接:https://blog.51cto.com/langlichong/1851961 。

最后此篇关于批处理中字符串分割实现代码的文章就讲到这里了,如果你想了解更多关于批处理中字符串分割实现代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com