批处理中字符串分割实现代码
批处理 字符串分割 实例
使用for命令可以对字符串进行分段处理。
分割字符串
@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环境变量。
@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这个目录:
@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的文件处理方式:
方案一:
@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 语句块只算一条))执行,而非逐行执行)
变量延迟详解 call setlocal
以上就是批处理中字符串分割实现代码的详细内容,更多关于批处理字符串分割的资料请关注猪先飞其它相关文章!
相关文章
- 这篇文章主要介绍了Windows批量搜索并复制/剪切文件的批处理程序实例,需要的朋友可以参考下...2020-06-30
BAT批处理判断服务是否正常运行的方法(批处理命令综合应用)
批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。这篇文章主要介绍了BAT批处理判断服务是否正常运行(批处理命令综合应用),需要的朋友可以参考下...2020-06-30- 本文介绍一下在C#中执行批处理文件(*.bat)的方法。...2020-06-25
- 这篇文章主要介绍了windows批量检测文件(夹)是否存在的批处理程序,需要的朋友可以参考下...2020-06-30
- 批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。...2020-06-30
- 这篇文章主要介绍了使用批处理脚本在特定目录中启动Git-Bash窗口,需要的朋友可以参考下...2020-08-14
- 在重装系统后,可能需要配置计算机的环境变量,在这里以配置Java环境变量为例讲解一种比较简单的设置方法,需要的朋友可以参考下...2020-06-30
- 这篇文章主要为大家详细介绍了python实现批处理文件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-07-28
- 批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们...2020-06-30
- 只要将下面的代码保存为1.bat运行一下即可自动设置win2003的安全,完成后自动重启,需要的朋友可以参考下。...2016-01-27
- 这篇文章主要为大家详细介绍了Windows下使用批处理文件.bat删除旧文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-30
- 这篇文章主要介绍了批处理将字符串或日期输出到Windows剪贴板的实现方法,主要是借助系统自带的clip.exe,这里为大家介绍一下,需要的朋友可以参考下...2020-08-14
- 这篇文章主要介绍了批处理中字符串分割实现代码,需要的朋友可以参考下...2020-08-14
- 这篇文章主要介绍了批处理ren重命名的方式,可以批量修改文件名,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-30
解决php curl_multi批处理造成CPU负载过高问题
今天在利用curl_multi函数来获取一些外网内容时发现只要一运行curl_multi函数我的cpu就占得非常的高,后来看一站长分享了此问题解决方法我也整理一下与各位分享一下,希...2016-11-25- 这篇文章主要介绍了批处理万年历实现代码(包括农历日期),月历查询工具 最初发表于CN-DOS,输出数字排序有问题大家可以自行修复一下...2020-06-30
- if,正如它E文中的意思,就是“如果”的意思,用来进行条件判断。翻译过来的意思就是:如果符合某一条件,便执行后面的命令。...2020-06-30
- 这篇文章主要介绍了批处理文件bat脚本实现代码自动提交和项目部署,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-30
- php 设置磁盘权限的批处理文件 第一步:输入网站访问帐号(为空则使用默认帐号[IUSR_****]),脚本会自动获取IUSR帐号,如IUSR帐号被改名则无法获取,[]中将显示空。另外如需...2016-11-25
- 本篇文章是对C++中执行多个exe文件方法的批处理代码进行了详细的分析介绍,需要的朋友参考下...2020-04-25