Bat 处理字符串分割 (split功能)
admin
2023-08-04 00:20:05
0

最近有有个小需求需要将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的文件处理方式:


方案一:

    

@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.

@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

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

@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

还有这样的:

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:

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 语句块只算一条))执行,而非逐行执行)

http://blog.csdn.net/icebergsnowfox/article/details/8047613


http://cndos.fam.cx/forum/    

http://ss64.com/   -  哎吆,不错哦

相关内容

热门资讯

洪水逼近房顶,河北男子和12个... 据央视新闻,受极端强降雨影响,河北承德宽城满族自治县宽城镇、孟子岭乡、桲罗台镇、龙须门镇4个乡镇共9...
特写:航海日遇上台风“巴威” ... 中新网 温州7月12日电(周健 林文伊)7月11日,是第22个“中国航海日”,与往年的节日氛围不同,...
2026折叠屏与性能旗舰销量盘... 这期盘点有点特殊,既看折叠屏也看性能旗舰。原因很简单,最近后台问这两类的特别多。折叠屏从"炫技"走向...
加拿大总理卡尼展示才艺,媒体:... 当地时间7月12日,加拿大总理在卡尔加里牛仔节上大秀颠可丽饼手艺。视频画面里,卡尼两次抛掷可丽饼都稳...
“菲律宾有人驱车9小时,只为一... 在菲律宾东南部城市达沃,近日举行的一场太阳能技术展吸引了700多人到场,有些人甚至驱车9小时前来。这...
智利一海军士官驾车冲入集市,致... 据法新社和美联社报道,当地时间7月12日,智利警方通报,当天在比尼亚德尔马市,一辆汽车冲入集市人行道...
沈阳现破纪录大暴雨,街道行车如... 台风“巴威”协助副热带高压持续输送水汽,沈阳国家站今天凌晨以来累计雨量达到了198.7毫米,已打破7...
深耕产业场景 让机器人在真实需... ● 本报记者 程雪儿 近年来,大模型、具身智能、人形机器人成为机器人产业关注焦点。与此同时,新能源汽...
5000元以下笔记本越来越少了... 近期,“5000元以下笔记本基本绝迹”的话题引发广泛讨论。曾经三四千元随便挑的平价机型,如今在主流渠...
知名粤菜品牌,肠粉中发现防腐剂 爱吃肠粉的人,“天塌了”。6月23日,市场监管总局发布公告称,其近日组织食品安全监督抽检1865批次...