Bat 处理字符串分割 (split功能)
最近有有个小需求需要将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&setlocalrem注意这里的s定义,其值不是使用双引号引起来的remalsoworksforcomma-separatedlists,e.g.ABC,DEF,GHI,JKLsets=AAABBBCCCDDDEEEFFFfor%%ain(%s%)doecho%%a
方案二:is the best for (most) arbitrary delimiter characters.
@echooff&setlocalsets=AAABBBCCCDDDEEEFFFsett=%s%:loopfor/f"tokens=1*"%%ain("%t%")do(echo%%arem将截取剩下的部分赋给t,其实这里可以使用延迟变量开关sett=%%b)ifdefinedtgoto:loop
有个老兄给了个更完整的(用到了延迟变量):
@echooffsetlocalENABLEDELAYEDEXPANSIONREMSetastringwithanarbitrarynumberofsubstringsseparatedbysemicolonssetteststring=The;rain;in;spainREMDosomethingwitheachsubstring:stringLOOPREMStopwhenthestringisemptyif"!teststring!"EQU""gotoENDfor/f"delims=;"%%ain("!teststring!")dosetsubstring=%%aREMDosomethingwiththesubstring-REMwejustechoitforthepurposesofdemoecho!substring!REMNowstripofftheleadingsubstring:striploopsetstripchar=!teststring:~0,1!setteststring=!teststring:~1!if"!teststring!"EQU""gotostringloopif"!stripchar!"NEQ";"gotostriploopgotostringloop):ENDendlocal
还有这样的:
setinput=AAABBBCCCDDDEEEFFFsetnth=4for/F"tokens=%nth%delims="%%ain("%input%")dosetnthstring=%%aecho%nthstring%
其实Powershell里可能有更多的内置函数可以使用:
PSC:\>"AAABBBCCCDDDEEEFFF".Split()
还有人提出用vbscrip代替bat:
SetobjFS=CreateObject("Scripting.FileSystemObject")SetobjArgs=WScript.Argumentsstr1=objArgs(0)s=Split(str1,"")Fori=LBound(s)ToUBound(s)WScript.Echos(i)WScript.Echos(9)'getthe10thelementNextusage:c:\test>cscript/nologotest.vbs"AAABBBCCC"
最后来一个bat中的小难点: 变量延迟(自上而下,逐条(简单语句、复合语句(for、if 语句块只算一条))执行,而非逐行执行)
http://blog.csdn.net/icebergsnowfox/article/details/8047613
http://cndos.fam.cx/forum/
http://ss64.com/ - 哎吆,不错哦
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。