计算机网络中如何批处理中字符串分割实现代码
这篇文章将为大家详细讲解有关计算机网络中如何批处理中字符串分割实现代码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
批处理 字符串分割 实例
使用for命令可以对字符串进行分段处理。
分割字符串
@echooff ::定义一个以分号作为分隔的字符串 setstr=AAA;BBB;CCC;DDD;EEE;FFF ::str的副本 setremain=%str% :loop for/f"tokens=1*delims=;"%%ain("%remain%")do( ::输出第一个分段(令牌) echo%%a rem将截取剩下的部分赋给变量remain,其实这里可以使用延迟变量开关 setremain=%%b ) ::如果还有剩余,则继续分割 ifdefinedremaingoto:loop pause
主要解释for语句:
delims=;表示以分号作为分隔符,对remain字符串进行分割处理。tokens=1*,tokens表示分段的方式,tokens=1*表示第一个分隔符;之前的作为一部分,剩下的(*表示)作为一部分。这两部分在循环体总可以用%%a表示第一部分,%%b表示第二部分。
批处理 遍历path环境变量
我们知道path环境变量也是以分号作为分隔符的,批处理中,所以同样可以用上面的代码来遍历path环境变量。
@echooff setlocalenabledelayedexpansion ::定义一个以分号作为分隔的字符串 setstr=%path% ::str的副本 setremain=%str% :loop for/f"tokens=1*delims=;"%%ain("%remain%")do( ::输出第一个分段(令牌) echo%%a rem将截取剩下的部分赋给变量remain,其实这里可以使用延迟变量开关 setremain=%%b ) ::如果还有剩余,则继续分割 ifdefinedremaingoto:loop pause
运行结果:
D:\dev\workspace\MarkdownTools......C:\windows\system32D:\dev\java\jdk1.8.0_91\binF:\Program Files\nodejs\node_globalF:\Program Files\Git\binD:\dev\apache-maven-3.5.4\bin......请按任意键继续. . .
批处理 判断path环境变量中是否有某个目录
例如查找系统path环境变量中是否存在D:\dev\workspace\MarkdownTools这个目录:
@echooff setlocalenabledelayedexpansion ::定义一个以分号作为分隔的字符串 ::setstr=AAA;BBB;CCC;DDD;EEE;FFF setstr=%path% ::str的副本 setremain=%str% settoFind=D:\dev\workspace\MarkdownTools setisFind=false :loop for/f"tokens=1*delims=;"%%ain("%remain%")do( if"%toFind%"=="%%a"( ::设置标记,以便后续使用 setisFind=true ::找到了就不找了 goto:finded ) rem将截取剩下的部分赋给变量remain,其实这里可以使用延迟变量开关 setremain=%%b ) ::如果还有剩余,则继续分割 ifdefinedremaingoto: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的文件处理方式:
方案一:
@echooff&setlocal rem注意这里的s定义,其值不是使用双引号引起来的 remalsoworksforcomma-separatedlists,e.g.ABC,DEF,GHI,JKL sets=AAABBBCCCDDDEEEFFF for%%ain(%s%)doecho%%a
方案二:is the best for (most) arbitrary delimiter characters.
@echooff&setlocal sets=AAABBBCCCDDDEEEFFF sett=%s% :loop for/f"tokens=1*"%%ain("%t%")do( echo%%a rem将截取剩下的部分赋给t,其实这里可以使用延迟变量开关 sett=%%b ) ifdefinedtgoto:loop
有个老兄给了个更完整的(用到了延迟变量):
@echooff setlocalENABLEDELAYEDEXPANSION REMSetastringwithanarbitrarynumberofsubstringsseparatedbysemicolons setteststring=The;rain;in;spain REMDosomethingwitheachsubstring :stringLOOP REMStopwhenthestringisempty if"!teststring!"EQU""gotoEND for/f"delims=;"%%ain("!teststring!")dosetsubstring=%%a REMDosomethingwiththesubstring- REMwejustechoitforthepurposesofdemo echo!substring! REMNowstripofftheleadingsubstring :striploop setstripchar=!teststring:~0,1! setteststring=!teststring:~1! if"!teststring!"EQU""gotostringloop if"!stripchar!"NEQ";"gotostriploop gotostringloop ) :END endlocal
还有这样的:
setinput=AAABBBCCCDDDEEEFFF setnth=4 for/F"tokens=%nth%delims="%%ain("%input%")dosetnthstring=%%a echo%nthstring%
其实Powershell里可能有更多的内置函数可以使用:
PS C:\> "AAA BBB CCC DDD EEE FFF".Split()
还有人提出用vbscrip代替bat:
SetobjFS=CreateObject("Scripting.FileSystemObject") SetobjArgs=WScript.Arguments str1=objArgs(0) s=Split(str1,"") Fori=LBound(s)ToUBound(s) WScript.Echos(i) WScript.Echos(9)'getthe10thelement Next usage: c:\test>cscript/nologotest.vbs"AAABBBCCC"
最后来一个bat中的小难点: 变量延迟(自上而下,逐条(简单语句、复合语句(for、if 语句块只算一条))执行,而非逐行执行)
变量延迟详解 call setlocal
关于“计算机网络中如何批处理中字符串分割实现代码”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
推荐阅读
-
计算机网络中软件的增量更新指的是什么
-
计算机网络中短视频特点有哪些
小编给大家分享一下计算机网络中短视频特点有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!短视频具有生产流程简...
-
早期计算机网络是如何组成系统的
这篇文章主要介绍早期计算机网络是如何组成系统的,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!早期的计算机网...
-
计算机网络中电子数字计算机最早的应用领域是什么
这篇文章将为大家详细讲解有关计算机网络中电子数字计算机最早的应用领域是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读...
-
计算机网络中通信数据行程卡是什么
小编给大家分享一下计算机网络中通信数据行程卡是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇...
-
计算机网络中信息内容安全包括什么
这篇文章主要介绍计算机网络中信息内容安全包括什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!信息内容安全...
-
计算机网络中人工智能研究的基本内容有哪些
小编给大家分享一下计算机网络中人工智能研究的基本内容有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!人工智能...
-
计算机网络中私有云和公有云的区别是什么
这篇文章主要介绍计算机网络中私有云和公有云的区别是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!区别:...
-
计算机网络中用高级语言编写的程序称为什么
这篇文章主要介绍计算机网络中用高级语言编写的程序称为什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!用高...
-
计算机网络中程序设计语言的发展经历哪几个过程
这篇文章主要介绍计算机网络中程序设计语言的发展经历哪几个过程,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!...