需求

现在有一个文件格式如图

ID 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
001 89.84 8.87 1.29 -0.0 0.0 68.99 0.0 0.0 4.67 1.48 0.0 0.0 14.69 0.0 0.0 0.0 0.01
002 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 99.99 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.01
003 0.0 0.0 0.0 0.0 99.99 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.01

需要把它的内容读出来,从第二行开始 (跳过第一行)     每一行用第一列作新文件名,把这一行的内容写进入。

代码实现

@echo off&setlocal EnableDelayedExpansion
color 0a
echo %date% %time%
echo  now......
set a=1
for /f "skip=1 tokens=1,* delims=	" %%i in (pop.txt) do (

     set "str=%%i.txt"
     echo !str!
     echo %%i	%%j  >  !str!
        set /a a+=1
    )

set /a a-=1
echo rename finish,rename count:%a%。
pause

新建成bat放入跟pop.txt同一个文件夹中点击运行

运行结果

运行结果如图

成功写入了文件。

查看文件内容

成功实现。

代码解析

除了一些时间和计数变量之外,关键实现的代码是这一句

for /f "skip=1 tokens=1,* delims= " %%i in (pop.txt) do ()

/f 代表的是读取的是一个文本文件,这样就会去读它的内容。

skip是跳过1行,从第二行开始

tokens表示取1列给%%i,*号表示取第一列之外的其他内容,这里第一列会给变量%%i,因为i后面的字母j,所以*号的内容会自动给%%j。

delims表示分隔符,我这里是tab分割的,反正直接粘贴文本中的复制进来就行了。

set "str=%%i.txt"
     echo !str!
     echo %%i %%j  >  !str!

这一段 用第一列构造文件名   然后把内容写入文件。

更多相似例子参考

假如文件a.txt中有如下内容:
第1行第1列 第1行第2列 第1行第3列
第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列

每行输出

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

输出结果
第1行第1列 第1行第2列 第1行第3列
第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列

分割列

delims 用来告诉for每一行应该拿什么作为分隔符,默认的分隔符是空格和tab键
比如,还是上面的文件,我们执行下面的命令:
for /f "delims= " %%i in (a.txt) do echo %%i
显示的结果是:
第1行第1列
第2行第1列
第3行第1列

为什么是这样的呢。因为这里有了delims这个参数,=后面有一个空格,意思是再将每个元素以空格分割,默认是只取分割之后的第一个元素。

取第几列

tokens的作用就是当你通过delims将每一行分为更小的元素时,由它来控制要取哪一个或哪几个。
还是上面的例子,执行如下命令:
for /f "tokens=2 delims= " %%i in (a.txt) do echo %%i
执行结果:
第1行第2列
第2行第2列
第3行第2列
如果要显示第三列,那就换成tokens=3。
同时tokens支持通配符*,以及限定范围。
如果要显示第二列和第三列,则换成tokens=2,3或tokens=2-3,如果还有更多的则为:tokens=2-10之类的。

此时的命令为:
for /f "tokens=2,3 delims= " %%i in (a.txt) do echo %%i %%j
怎么多出一个%%j?
这是因为你的tokens后面要取每一行的两列,用%%i来替换第二列,用%%j来替换第三列。
并且必须是按照英文字母顺序排列的,%%j不能换成%%k,因为i后面是j
执行结果为:
第1行第2列 第1行第3列
第2行第2列 第2行第3列
第3行第2列 第3行第3列

对以通配符*,就是把这一行全部或者这一行的剩余部分当作一个元素了。
比如:
for /f "tokens=* delims= " %%i in (a.txt) do echo %%i
执行结果为:
第1行第1列 第1行第2列 第1行第3列
第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列
其实就跟for /f %%i in (a.txt) do echo %%i的执行结果是一样的。

再如:
for /f "tokens=2,* delims= " %%i in (a.txt) do echo %%i %%j
执行结果为:
第1行第2列 第1行第3列
第2行第2列 第2行第3列
第3行第2列 第3行第3列
用%%i代替第二列,用%%j代替剩余的所有

跳过和忽略行

skip和eol,这俩个简单,skip就是要忽略文件的前多少行,而eol用来指定当一行以什么符号开始时,就忽略它。
比如:
for /f "skip=2 tokens=*" %%i in (a.txt) do echo %%i
结果为:
第3行第1列 第3行第2列 第3行第3列
用skip来告诉for跳过前两行。

如果不加tokens=*的话,执行结果为:
第3行第1列
不知道怎么回事。

再如,当a.txt内容变成:
.第1行第1列 第1行第2列 第1行第3列
.第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列
执行for /f "eol=. tokens=*" %%i in (a.txt) do echo %%i结果是:
第3行第1列 第3行第2列 第3行第3列
用eol来告诉for忽略以“.”开头的行。
同样也必须加tokens=*,否则只会显示“第3行第1列”

扩展--每个文件保留第一行

@echo  off&setlocal enabledelayedexpansion
color 0a
echo %date% %time%
echo  now......
set a=0
for /f "tokens=1,* delims=	" %%i in (pop.source) do (

     If !a!==0 (
	  echo %%i	%%j
	  set title=%%i	%%j
	  set /a a+=1
	  echo !title!
	  ) else (

      set "str=%%i.source"
      echo !str!
	  echo !title!  >  !str!
      echo %%i	%%j  >>  !str!
        set /a a+=1
		)
    )

set /a a-=1
echo rename finish,rename count:%a%。
pause

注意

@echo  off&setlocal enabledelayedexpansion 设置成延迟变量 和 判断时用 !a!很重要。

而不是用 %a%来作判断。!a!才能反应变动。

CMD批处理把txt文本中的每行写入一个新文件,第一列作文件名的更多相关文章

  1. 按行读取.txt文件,并按行写入到新文件中

    package com.test.io; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fi ...

  2. 拷贝txt文本中的某行的数据到excel中

    package com.hope.day01;import java.io.*;import java.util.ArrayList;public class HelloWorld {    publ ...

  3. 使用SQLsever批量查询TXT文本中的值

    测试文档如下,需要查到case_no值为以下时,对应的单据信息分别是什么. 步骤如下: 在txt文本中 Ctrl+H,输入如下,点击“全部替换” 在word文本中,复制以上信息到word文本中,目的是 ...

  4. java:利用java的输入/输出流将一个文件的每一行+行号复制到一个新文件中去

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  5. WordPress后台的文章、分类,媒体,页面,评论,链接等所有信息中显示ID并将ID设置为第一列

    WordPress后台默认是不显示文章.分类等信息ID的,查看起来非常不方便,不知道Wp团队出于什么原因默认不显示这个但可以使用Simply Show IDs插件来实现 不使用插件,其他网友的实现: ...

  6. Shell脚本中引用、调用另一个脚本文件的2种方法

    Shell脚本中引用.调用另一个脚本文件的2种方法 http://www.jb51.net/article/67903.htm

  7. 有意思的RTL函数RegisterClass(在持久化中,你生成的一个新类的对象,系统并不知道他是如何来的,因此需要你注册)good

    例子1:Delphi中使用纯正的面向对象方法(这个例子最直接) Delphi的VCL技术使很多程序员能够非常快速的入门:程序员门只要简单的拖动再加上少量的几个Pascal语句,呵呵,一个可以运行得非常 ...

  8. Qt txt文本中获取字符串的问题

    QT对txt文本进行读写一般是采用QFile和QTextStream结合使用,在此不细说,主要说一下读取txt文本的注意事项.因为txt文本中有中文也有英文还有数字,要准确获得需要的字串可就要多一个心 ...

  9. [转]bat批处理实现TXT文本合并

    本文转自:http://quanhuaming.blog.163.com/blog/static/1405693672010210101124905/ 有朋友问是否有可以合并TXT文本文件的软件,于是 ...

随机推荐

  1. python的基本知识,range在python2.x中和python3.x中的区别

    这些是最开始学习python时的笔记,今天整理一下,在这里记录一下. 各种基础代码解释 for key,item in enumerate(li): print(key,item) inp=input ...

  2. discuzX3.2 X3.4网站漏洞修复 SQL注入与请求伪造攻击利用与修复

    2018年12月9日,国内某安全组织,对discuz X3.2 X3.4版本的漏洞进行了公开,这次漏洞影响范围较大,具体漏洞是discuz 的用户前段SQL注入与请求伪造漏洞,也俗称SSRF漏洞,漏洞 ...

  3. (数据科学学习手札11)K-means聚类法的原理简介&Python与R实现

    kmeans法(K均值法)是麦奎因提出的,这种算法的基本思想是将每一个样本分配给最靠近中心(均值)的类中,具体的算法至少包括以下三个步骤: 1.将所有的样品分成k个初始类: 2.通过欧氏距离将某个样品 ...

  4. Linq工具篇(1)——使用LinqPad

    学习Linq,有一个非常强大的工具,那就是LinqPad,具体功能有多强大就不说了,网上百度一下就可以知道,百闻不如一见,用用就知道,在网上下载一个绿色版的,无需安装,直接运行,界面如下: 具体功能, ...

  5. linux内存

    在Linux的世界中,从大的方面来讲,有两块内存,一块叫做内存空间,Kernel Space,另一块叫做用户空间,即User Space.它们是相互独立的,Kernel对它们的管理方式也完全不同 驱动 ...

  6. Vue一些重要的知识点

    vue sync修饰(1)双向数据绑定,父子组件之间信息的交互 1⃣️在自组件中使用this.emmit('toFather'),子组件产生一个tofather事件,然后在父组件中通过@进行监听,那么 ...

  7. coia阻止事件上浮

    1.阻止事件上浮 选择默认地址li 时 选中整个div使其为默认地址 此时点击编辑按钮也会触发选中默认事件 为事件添加event.stopPropagation();阻止事件上浮 2.js给页面inp ...

  8. 关于Scala文件操作中出现的问题

    在各种项目中,我们常常需要用到文件操作,笔者在近期的项目中遇到了一个与文件操作相关的问题. 在代码实现的过程中,笔者首先定义了一个文件路径:def PATH = "/a/b/c.txt&qu ...

  9. 1.16. BIP39协议:使用助记词生成确定性钱包

    以太坊系统学习教程: https://www.netkiller.cn/blockchain/bip39.html 1.16. BIP39协议:使用助记词生成确定性钱包 BIP:39 层:应用层 标题 ...

  10. tinymce4.x 上传本地图片 (转载)

    转载自:http://www.cnblogs.com/fhen/p/5809514.html tinymce4.x 上传本地图片   tinymce是一款挺不错的html文本编辑器.但是添加图片是直接 ...