批处理FOR 中的Delims和Tokens总结

在For命令语句的参数F中,最难理解的就是Delims和Tokens两个选项,本文简单的做一个比较和总结。
“For /f”常用来解析文本,读取字符串。分工上,delims负责切分字符串,而tokens负责提取字符串。如果把字符串当作蛋糕,Delims像刀子,用来切蛋糕,tokens像叉子,用来取切好的蛋糕。下面我们用实例来进行理解。
把以下内容保存为文本文件“歌曲列表.txt”,注意扩展名为“.txt”:
序号、歌手名-歌曲名.后缀名
1、饶天亮-玫瑰爱人.wma
2、高一首-我不愿错过.mp3
3、黃凱芹-傷感的戀人.MP3
4、黄灿-黄玫瑰.lrc
5、黎姿-如此这般的爱情故事.mp3
代码1:显示全部内容
@echo off
for /f %%i in (歌曲列表.txt) do echo %%i
pause>nul
运行结果:
序号、歌手名-歌曲名.后缀名
1、饶天亮-玫瑰爱人.wma
2、高一首-我不愿错过.mp3
3、黃凱芹-傷感的戀人.MP3
4、黄灿-黄玫瑰.lrc
5、黎姿-如此这般的爱情故事.mp3
讲解:
如果不使用参数“/f”,运行结果只显示括号里的文字字符“歌曲列表.txt”,而不能读取文本文件“歌曲列表.txt”中的内容。可见,“/f”是解析文本字符串的好工具。
一、delims
假如只要序号,不要歌手名、歌曲名和后缀名,如何办到?
代码2:默认提取第一列
@echo off
for /f "delims=、" %%i in (歌曲列表.txt) do echo %%i
pause>nul
运行结果:
序号
1
2
3
4
5
讲解:
"delims=、"表示定义顿号“、”为分隔符,并用该分隔符“、”切分文本字符串。字符串就是“歌曲列表.txt”里的内容,也就是文件里的文字和标点符号。
该顿号是原文中就有的。除了顿号“、”,原文中还有减号“-”和点号“.”,因此你也可以用它们来做分隔符。
代码3:用减号“-”做分隔符
@echo off
for /f "delims=-" %%i in (歌曲列表.txt) do echo %%i
pause>nul
运行结果:
序号、歌手名
1、饶天亮
2、高一首
3、黃凱芹
4、黄灿
5、黎姿
讲解:
因为,当减号“-”被用做分隔符时,每行内容被减号“-”分隔成前后两半,默认只显示前半部分,而后半部分连同分隔符减号“-”都被忽略(省略)了。
代码4:用点号“.”做分隔符
@echo off
for /f "delims=." %%i in (歌曲列表.txt) do echo %%i
pause>nul
运行结果:
序号、歌手名-歌曲名
1、饶天亮-玫瑰爱人
2、高一首-我不愿错过
3、黃凱芹-傷感的戀人
4、黄灿-黄玫瑰
5、黎姿-如此这般的爱情故事
讲解:
默认情况下,单纯使用delims而不用tokens时,只显示第一个分隔符前的内容,第一个分隔符和第一个分隔符后面的内容将被忽略。
代码5:定义多个分隔符
@echo off
for /f "delims=、-." %%i in (歌曲列表.txt) do echo %%i
pause>nul
运行结果:
序号
1
2
3
4
5
讲解:
原因是,当定义顿号“、”、减号“-”和点号“.”三个标点符号为分隔符后,原文被分隔成四个部分。
如第二行“1、饶天亮-玫瑰爱人.wma”将被分隔成“1”、“饶天亮”、“玫瑰爱人”和“wma” 四个部分。
从第一行到最后一行,每行的每个部分对应下来相当于一个竖列。因此,原文就有“序号”、“歌手名”、“歌曲名”、“后缀名”四列。
一般情况下,只读取第一列的内容。后面的内容需要用tokens选项提取。

(0)

相关推荐

  • 关于批处理中FOR语句的使用说明与学习技巧

    批处理 bat中的for命令的作用,非常的不错,可以节省很多效率,它可以读取文章的没一行,循环执行ping命令,老探索端口,学习批处理如果不学习for将是个遗憾,希望大家多看看for 命令的实际应用的例子,如果只看简单的基础的使用方法,而缺少实际应用的话,再多的基础也不成,一定先看实例再看基础,带着问题去看基础,相信很快大家就可以上手了,本站有不少这样的资源,大家可以搜下下面我就把for命令的基本参数整理下,大家在学习的时候可以在dos下打for /?来查看帮助,大家都是这样过来的 For 对一

  • cmd forfiles 从文件夹或树中选择要进行批处理的文件(方便批量删除n天前的文件)

    FORFILES [/P pathname] [/M searchmask] [/S] [/C command] [/D [+ | -] {yyyy-MM-dd | dd}] 描述: 选择一个文件(或一组文件)并在那个文件上 执行一个命令.这有助于批处理作业. 参数列表: /P pathname 表示开始搜索的路径.默认文件夹是当前工作的 目录 (.). /M searchmask 根据搜索掩码搜索文件.默认搜索掩码是 '*'. /S 指导 forfiles 递归到子目录.像 "DIR /S&q

  • 使用批处理for命令清除事件查看器所有Windows EventLog日志

    以前装完系统后要做个Ghost,为了达到完美,每次做Ghost前都会手动清除 事件查看器所有Windows EventLog日志. 后来使用了Windows 2008 r2/Win7后,这事变的复杂多了,所以也就没管了. 再后来有同事问到如何把他们全部清除,因为一个一个清,在Microsoft一级有很多目录,要想完全清除得半小时,并且清除后又有了,不实用. 再到今天,我在玩Hyper-V时,总看到一堆Error,鉴于之前给公司做的持续交付里,批处理大显身手,所以想应该可以使用批处理来实现, Go

  • 批处理中常用命令介绍(Echo、rem、goto、call、pause、if、for)

    一.echo命令 (echo图文版) 1. Echo :显示当前ECHO的状态:ECHO ON 或者ECHO OFF .2. ECHO ON :ECHO状态设为ON,将显示命令行(如每行前的C:\>等类似标志).3. ECHO OFF:CHO状态设为OFF,将不显示命令行(如每行前的C:\>等类似标志) .4. ECHO 字符串 :将输入的字符串显示在CMD屏幕上.5. ECHO 字符串 &ECHO 字符串 - :&,类似and的意思,逻辑运算,用来显示多行数据.6. ECHO

  • 浅谈PL/SQL批处理语句:BULK COLLECT与FORALL对优化做出的贡献

    我们知道PL/SQL程序中运行SQL语句是存在开销的,因为SQL语句是要提交给SQL引擎处理这种在PL/SQL引擎和SQL引擎之间的控制转移叫做上下文却换,每次却换时,都有额外的开销 请看下图: 但是,FORALL和BULK COLLECT可以让PL/SQL引擎把多个上下文却换压缩成一个,这使得在PL/SQL中的要处理多行记录的SQL语句执行的花费时间骤降请再看下图: 下面详解这爷俩 ㈠ 通过BULK COLLECT 加速查询 ⑴ BULK COLLECT 的用法 采用BULK COLLECT可

  • 批处理 FOR参数/F之tokens详解

    (四)tokens=x,y,m-n 提取列 格式: FOR /F "tokens=x,y,m-n" %%I IN (Command1) DO Command2 用法: 一句话总结:提取列. 通俗讲,共同提取每一行的第m小节的内容. 因此,可以用该命令来指定提取文本信息. tokens=有时表示提取全部. tokens=m表示提取第m列. tokens=m,n表示提取第m列和第n列. tokens=m-n表示提取第m列至第n列. Tokens=*表示删除每行前面的空格.忽略行首的所有空格

  • 批处理for命令使用指南

    FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能! 看看他的基本格式(这里我引用的是批处理中的格式,直接在命令行只需要一个%号) FOR 参数 %%变量名 IN (相关文件或命令) DO 执行的命令 参数:FOR有4个参数 /d   /l   /r   /f   他们的作用我在下面用例子解释 %%变量名 :这个变量名可以是小写a-z或者大写A-Z,他们区分大小写,FOR会把每个读取到的值给他; IN:命令的格式,照写就是了; (相关文件或命令) :FOR要把什么东西读取然后赋值给变

  • 批处理FOR 中的Delims和Tokens总结

    在For命令语句的参数F中,最难理解的就是Delims和Tokens两个选项,本文简单的做一个比较和总结. "For /f"常用来解析文本,读取字符串.分工上,delims负责切分字符串,而tokens负责提取字符串.如果把字符串当作蛋糕,Delims像刀子,用来切蛋糕,tokens像叉子,用来取切好的蛋糕.下面我们用实例来进行理解. 把以下内容保存为文本文件"歌曲列表.txt",注意扩展名为".txt": 序号.歌手名-歌曲名.后缀名 1.饶天

  • 批处理delims=和tokens=星号 的使用差别

    比较以下两段代码的执行结果差异: 1. @echo off for /f "delims=" %%i in (test.txt) do echo /%%i/ pause 2. @echo off for /f "tokens=*" %%i in (test.txt) do echo /%%i/ pause test.txt 的内容为: abc .行首有若干空格. 看到有什么差别了吗? 原因:"delims=" 的含义是取消默认的分隔符,所以会把行

  • 批处理程序中的“多线程”处理代码

    如下内容将简单举例,在WINDOWS下使用批处理做多进程并发,以达到"多线程"的效果. 例:需要PING 192.168.0.1到192.168.0.254的所有IP地址,并将是否能PING通的结果输出到log.txt 实现如下: rem 主程序.bat,只需一行代码,调用checkip.bat,经测试,CPU2.6G MEM1G可并发40个左右的进程 复制代码 代码如下: for /l %%i in (1,1,254) do (start /min cmd /c checkip.ba

  • 如何让“>”显示出来批处理(dos)中的转义符号

    如何让">"显示出来 echo ^> >1.txt "^"用来标识特殊符号

  • BAT批处理中使用数组示例

    批处理指令中并没有原生支持数组,但这不代表不能模拟出来. 来看下面的代码: SET Obj_Length=2 SET Obj[0].Name=Test1 SET Obj[0].Value=Hello World SET Obj[1].Name=Test2 SET Obj[1].Value=blahblah 这样就定义了一个数组了,而且是结构体的数组. 在需要取值的时候,可以这么玩: SET Obj_Index=0 :LoopStart IF %Obj_Index% EQU %Obj_Length

  • 批处理命令向win server AD域中批量添加用户实现(2种)

    目录 第一种方式:命令行传参添加 第二种方式:读取文件添加用户 因为要用个批处理命令在Windows Server里面批量添加域用户,所以需要使用批处理命令. 我这篇是纯新手教程,在百度上搜了一些批处理命令感觉属于进阶教程,研究了两天才完成我要完成的目标. 下面从头说一下: 批处理bat文档建立. 直接新建一个TXT文档然后把后缀名改成.bat就可以了,就是一个bat文档,双击可以运行.注意:bat文件在哪,他的运行路径就在哪.添加成功的用户 第一种方式:命令行传参添加 dsadd user "

  • DOS批处理高级教程 第三章 FOR命令中的变量

    FOR命令中有一些变量,他们的用法许多新手朋友还不太了解,今天给大家讲解他们的用法! 先把FOR的变量全部列出来: ~I          - 删除任何引号("),扩展 %I      %~fI        - 将 %I 扩展到一个完全合格的路径名      %~dI        - 仅将 %I 扩展到一个驱动器号      %~pI        - 仅将 %I 扩展到一个路径      %~nI        - 仅将 %I 扩展到一个文件名      %~xI        - 仅将

  • 利用certutil.exe实现在批处理(bat)中嵌入exe文件的方法

    利用certutil.exe实现在批处理(bat)中嵌入可执行文件或者各种媒体.图片之类二进制文件的简单方法! 实际上利用certutil.exe 把二进制文件(包括各种文件,exe可执行程序,图片,声音,mp3) 经过base64编码为文本,可以实现把这些文件嵌入到批处理代码中. ###有什么用?: 举个例子,批处理经常需要依赖其它命令行工具实现自动化脚本,如果把这些工具转成文本嵌入到代码中,贴到网上就可以直接把可用的代码发出去了.不需要上传附件. ###缺点: base64编码后的文本比原文

  • 执行批处理bat程序中的条件处理

    以下代码是使用 if /? >> C:\help.txt 生成的. ----------------------------------------------------------------- 执行批处理程序中的条件处理. IF [NOT] ERRORLEVEL number command IF [NOT] string1==string2 command IF [NOT] EXIST filename command NOT               指定只有条件为 false 的

随机推荐