最近有有个小需求需要将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/ - 哎吆,不错哦
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。