用批处理批量读取文本文件的内容.docx

上传人:牧羊曲112 文档编号:3658953 上传时间:2023-03-14 格式:DOCX 页数:7 大小:38.59KB
返回 下载 相关 举报
用批处理批量读取文本文件的内容.docx_第1页
第1页 / 共7页
用批处理批量读取文本文件的内容.docx_第2页
第2页 / 共7页
用批处理批量读取文本文件的内容.docx_第3页
第3页 / 共7页
用批处理批量读取文本文件的内容.docx_第4页
第4页 / 共7页
用批处理批量读取文本文件的内容.docx_第5页
第5页 / 共7页
亲,该文档总共7页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《用批处理批量读取文本文件的内容.docx》由会员分享,可在线阅读,更多相关《用批处理批量读取文本文件的内容.docx(7页珍藏版)》请在三一办公上搜索。

1、用批处理批量读取文本文件的内容用批处理批量读取文本文件的内容 用批处理批量读取文本文件的内容 文章转自: 忆林子 今天中午感觉有点累,所以就睡了一会,睡醒时已经是4点半了,然后就开起了电脑。刚上QQ没多久,就一个人加我了,他遇到问题了。以下是他的文件 他有好几10个文本,每个文本里的内容结构如下 安徽百货购物店名录 合延综合门市部 地址:安徽省东至县香隅镇合延村 电话:0566* 邮编:247100 合镇综合门市部 地址:安徽省东至县香隅镇香隅村 电话:0566* 邮编:247100 大楼百货门市部 地址:安徽省东至县昭潭镇 电话:0566* 邮编:247100 其中第一行为子分类吧,之后就是

2、4行一组数据。他现在想把所有文本的第一行换成那个文本的文件名 但是文件又很多,所以不想一个一个去打开。 他刚发我的时候是用截图的形式,我刚开始看到的时候以为这个冒号是半角的,并且它这里又有空行。如果这两个不是共存的话,那处理起来会方便点,但是偏偏他给我的是共存的情况。 在批处理中这两个是很特殊的如果用for结合findstr的话,可以取得空行,但是却会丢失冒号 用for结合more命令可以取得所有内容,但是就是偏偏会丢失空行 后面他它文本发我之后,我仔细一看,他的冒号是全角的,我想那我就可以用findstr来处理了,但是经过我确认之后他又说是全半角混合。所以我只 能用more命令来处理了,但是

3、那样的话,空格就得我手动在批处理循环的过程添加。这样的话,我想过取模操作,但是在批处理中我还没用过,至少之前还没去 研究过怎么取模,所以这个计划也不行了。仔细一看,他发我的文件的空行并不是真正的空行,而是有空格填充的,所以这样就可以正常用more来处理了。 好了,关键点解决之后就是写代码了。 1、把所有要处理的文本的文件名列出来发送到一个临时文件时(lst.lst) 2、用for命令来读取那个lst.lst的列表文件 用ren命令把文本重命名为 文件名.bak echo 命令把文件名发送到 文件名(即文本的第一行标题) 在循环中再用for来读取列表中的单个文件名所指向的文本名.bak,使用sk

4、ip来跳过第一行 在for的结果中判断是不是为空行 是:输出四个空格 不是:输出原来的内容 全部读取完之后,用del 把文件名.bak删除 3、最后用del命令把lst.lst这个临时列表文件删除 虽然效果是达到了,但是我觉得这个批处理还是有问题,比较它并没有处理冒号跟空行 并且就为了把第一行修改而要把整个文件的内容读取出来,这样效率上是个问题。 用VBS脚本来处理的话,效率上会比批处理高一点,但是这样的操作觉得还是不合常规。 但是在工作中为了实现效果,也管不了那么多了。曾经想过用vbs来写一个读取文件的,但是用vbs修改起来不像批处理这么灵活,所以也就放弃了。就 先用这个批处理将就着吧,希望

5、他的文件没有特殊情况,要不然我这个批处理也无法解决他的问题。不过目前我跟他确认之后他说效果是满意的。 下面把最主要的批处理放上来吧。 ECHO OFF COLOR 0a CALL :delTempFiles dir *.txt /a /b>>lst.lst FOR /F tokens=* %a IN ( more lst.lst ) DO ( ren %a %a.bak echo 正在处理 %a echo %na>>%a FOR /F tokens=* skip=1 %A IN ( more %a.bak ) DO ( if /i %A= ( echo. >>%a )

6、else ( echo %A>>%a ) ) del %a.bak /q 1>nul 2>nul ) CALL :delTempFiles PAUSE EXIT :delTempFiles del lst.lst /q 1>nul 2>nul GOTO :EOF 吃完饭回来之后,突然想到了变相取模的方法,也不算取模了,反正就是实现了那个效果,_,这样就不用考虑它的空行了,因为它这里的数据是有规律 的嘛,都是4行一组数据,所以可以用这个方法了。以下的方法中使用了SETLOCAL命令来启用变量延迟。要不然也无法实现效果,另外要注意的就是用了这 个命令之后在循环体等语句块中要

7、取变量的值的话,不能再用 %了,要用 !了,以下把代码粘贴上来,大家可以用文本比较软件来看看有哪些是不一样的。 ECHO OFF COLOR 0a CALL :delTempFiles dir *.txt /a /b>>lst.lst FOR /F tokens=* %a IN ( more lst.lst ) DO ( ren %a %a.bak echo 正在处理 %a echo %na>>%a echo. >>%a SETLOCAL ENABLEDELAYEDEXPANSION set counter=-1 FOR /F tokens=* skip=2 %A IN ( more %a.bak ) DO ( set /a counter=!counter!+1 if /i !counter!=4 ( echo. >>%a set counter=-1 ) else ( echo %A>>%a ) ) ENDLOCAL del %a.bak /q 1>nul 2>nul ) CALL :delTempFiles PAUSE EXIT :delTempFiles del lst.lst /q 1>nul 2>nul GOTO :EOF Powered by 无名小鬼

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号