0x00 前言

今天在对windows进行提权之前的系统信息收集的时候,需要使用到一条批处理语句把特定部分的内容从一个txt的文本当中提取出来;该条语句是如下:

for /f "tokens=2,3 delims==" %%a in (tmplist.txt) do (echo %%a >> software.txt)

当时跟着流程操作的时候,对这条语句的了解也只是仅限于知道这条语句的作用是将tmplist.txt文本文件里面的内容按照一定规则取出想要的部分的内容输出到software.txt文本里;

但是跟着教程一路操作下来,到了这一步却出现了如下的错误:

报出的错误是此处不应有%%a,按照这个错误提示去搜索,也没有找到一个能解决的答案

反复确认前面的操作也一模一样过后,到了我这里却不对了,这种感觉是很不爽的,所以需要弄明白这条指令的确切使用方法与含义。

0x01 对整条语句的分解剖析

1、for /f :用来解析文本,读取字符串 ,将要读取的文本就是tmplist.txt。

2、tokens:tokens负责提取字符串。具体用法见实例。

3、delims:根据定义的符号,负责切分字符串,比如delims== 就是根据=号来切分字符串。

4、in 、do :也就是表面的含义吧,在什么里面和做什么

5、(tmplist.txt):要操作的文本文件

6、echo %%a >> software.txt: 将一段内容重定向到software.txt文本中

0x02 示例1

要处理的文本文件名为:tmplist.txt,其内容为:

1、饶天亮=玫瑰爱人.wma
2、高一首=我不愿错过.mp3
3、黃凱芹=傷感的戀人.MP3
4、黄灿=黄玫瑰.lrc
5、黎姿=如此这般的爱情故事.mp3

--显示文本文件内的全部内容,执行的命令:

for /f %%i in (tmplist.txt) do echo %%i

得到的结果如下:

0x03 示例2

--假如只要序号和歌手名,不要歌曲名和后缀名(默认提取左边的内容),执行的命令:

for /f "delims==" %%a in (tmplist.txt) do echo %%a

得到的结果如下:

**delims的作用就是设定分割符,"delims=="表示定义等号“=”为分隔符,并用该分隔符“=”切分文本字符串。字符串就是“tmplist.txt”里的内容,也就是文件里的文字和标点符号。

0x04 示例4

--假如只要歌手名和歌曲名,不要序号和后缀名,执行的命令如下

for /f "tokens=2 delims=*." %%a in (tmplist.txt) do echo %%a

经过实际的尝试,发现如果使用中文编码的符号顿号“、”来作为分割符,是无法正确得到结果的,所以将序号后面的顿号全部改为“*” ,以便测试的正常进行;

1*饶天亮=玫瑰爱人.wma
2*高一首=我不愿错过.mp3
3*黃凱芹=傷感的戀人.MP3
4*黄灿=黄玫瑰.lrc
5*黎姿=如此这般的爱情故事.mp3

得到的结果如下:

**所以用delims定义顿号“*”和点号“.”作为分隔符,将原文分成三部分。

例如:1*饶天亮=玫瑰爱人.wma这一行就被分为以下三部分:

1···················第一部分给定序号为1

饶天亮=玫瑰爱人············第二部分给定序号为2

wma··················第三部分给定序号为3

-------------------------------------------------

tokens的意义就是,提取指定的列。

-------------------------------------------

所以当内容被分为3部分过后,tokens的作用就是根据他们各自的序号来选择取出那一部分的字符串用来输出,所以在刚才示例中tokens的值为2,因此表示的就是取出被分割出来的字符串里面的第二部分内容

所以如果想要取出第2、3部分的话,代码如下:

for /f "tokens=1,3 delims=*." %%a in (tmplist.txt) do echo %%a %%b

**不知道有没有发现,当tokens的参数有两个时,在命令的最后多了一个参数 %%b

“%%a %%b”对应于“token”后面的列数。有多少列就要有多少个输出变量,并且各变量中的字母存在先后顺序。

0x05 关于最开始的报错:“此处不应有%%a ”的解决办法

根绝前面的分析,整条命令的用法,以及各个参数的含义已经基本了解,并且根据操作都能正确的执行并得到结果,但是当我还是按照我最后的理解在cmd命令行里面去执行的时候,依然爆出“此处不应有%%a”的错误,最后发现,如果将所有的需要执行的命令都放在.bat的脚本文件里去执行的话都不会有任何错误,但是如果将命令直接放到cmd命令行执行的话,还是不能正确执行;

最后找到的解决办法就是:如果想要在cmd命令行里面使for /f "tokens=2,3 delims==" %%a in (tmplist.txt) do (echo %%a >> software.txt)语句生效执行的话,需要将%%a换成%a,就能正确执行了;

0x06 参考链接

http://blog.sina.com.cn/s/blog_4b795cc10100ez8d.html

批处理之 for /f 中的delims和tokens的更多相关文章

  1. DOS批处理:FOR中的Delims和Tokens参数

    在For命令语句的参数F中,最难理解的就是Delims和Tokens两个选项,本文简单的做一个比较和总结. “For /f”常用来解析文本,读取字符串.分工上,delims负责切分字符串,而token ...

  2. for /f命令之—Delims和Tokens用法&总结

    在For命令语踞饽参数F中,最难理解的就是Delims和Tokens两个选项,本文简单的做一个比较和总拮.“For /f”常用来解析文本,读取字符串.分工上,delims负责切分字符串,而tokens ...

  3. 转发:for /f命令之—Delims和Tokens用法&总结

    在For命令语踞饽参数F中,最难理解的就是Delims和Tokens两个选项,本文简单的做一个比较和总拮.“For /f”常用来解析文本,读取字符串.分工上,delims负责切分字符串,而tokens ...

  4. Batch - FOR /F Delims 和 Tokens 用法

    原文地址: for /f命令之—Delims和Tokens用法&总结 作者:别逗了好么 在For命令语踞饽参数F中,最难理解的就是Delims和Tokens两个选项,本文简单的做一个比较和总拮 ...

  5. 批处理之 for/f 详解

    含有/F的for格式:FOR /F ["options"] %%i IN (file) DO command FOR /F ["options"] %%i IN ...

  6. Bat批处理之for/f详解

    转自:https://www.cnblogs.com/zhangq/p/3988697.html 含有/F的for格式: FOR /F ["options"] %%i IN (fi ...

  7. F#中的自定义隐式转换

    我们知道隐式变换在可控情况下会使代码变得简洁.熟悉C#的都知道C#中可以自定义隐式变换,例如 public class A { private int data; public static impl ...

  8. 6.6.1 F# 中函数调用的类型判断

    6.6.1 F# 中函数调用的类型判断 尽管,在 F# 中能够用尖括号指定类型參数值.与 C# 中的方式同样.但这样的方法非常少使用. 原因是,当编译器无法判断出全部的信息,须要程序猿的帮助时.我们仅 ...

  9. CMD批处理把txt文本中的每行写入一个新文件,第一列作文件名

    需求 现在有一个文件格式如图 ID 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17001 89.84 8.87 1.29 -0.0 0.0 68.99 0.0 0. ...

随机推荐

  1. Scratch3.0——项目层次结构

    原文地址:https://blog.csdn.net/weiwoyonzhe/article/details/86603757 简要介绍: 本文旨在介绍scratch3.0项目层次结构及关键功能. 源 ...

  2. iStat Menus 的激活密

    Email: @qq.com SN: GAWAE-FCWQ3-P8NYB-C7GF7-NEDRT-Q5DTB-MFZG6-6NEQC-CRMUD-8MZ2K-66SRB-SU8EW-EDLZ9-TGH ...

  3. codeforces 407D Largest Submatrix 3

    codeforces 407D Largest Submatrix 3 题意 找出最大子矩阵,须满足矩阵内的元素互不相等. 题解 官方做法 http://codeforces.com/blog/ent ...

  4. DZ拿shell总结

    今天碰到一个dz的站,好久没拿了 ,拿下shell觉得应该总结一下 Uc_server默认密码 其实有了UC_SERVER就是有了网站的全部权限了,有了UC_SERVER你可以重置管理员密码 可以进后 ...

  5. 图论——最短路径 Dijkstra算法、Floyd算法

    1.弗洛伊德算法(Floyd) 弗洛伊算法核心就是三重循环,M [ j ] [ k ] 表示从 j 到 k 的路径,而 i 表示当前 j 到 k 可以借助的点:红色部分表示,如果 j 到 i ,i 到 ...

  6. programming-languages学习笔记--第7部分

    programming-languages学习笔记–第7部分 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src ...

  7. 【Vue】安装(NPM 方法)

    [Vue2.0 新手完全填坑攻略——从环境搭建到发布]http://www.jianshu.com/p/5ba253651c3b 1.在用 Vue.js 构建大型应用时推荐使用 NPM 安装 2.Vu ...

  8. 8、Spring Cloud-配置中心 Spring Cloud Config(待补充)

    8.1.Config Server 本地读取配置文件 Config Server 可以从本地仓库读取配置文件,也可以从远处 Git 仓库读取.   本地仓库是指将所有的配置文件统 写在 Config ...

  9. selenium + python自动化测试unittest框架学习(三)webdriver对页面其他控件操作(三)

    1.对话框,下拉框 (1)对话框的有两种,一种是iframe格式的,需要switch_to_iframe()进行定位,现在大部分的对话框是div格式的,这种格式的可以通过层级定位来定位元素,先定位对话 ...

  10. Java java httpclient4.5 进行http,https通过SSL安全验证跳过,封装接口请求 get,post(formdata,json)封装,文件上传下载

    package api; import java.util.*; import java.net.URI; import org.apache.http.Consts; import org.apac ...