![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-08 19:11 |
共 47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如何按行读取多个文本文件来实现文本的合并 |
| 可打印版本 2,335 / 15 |
| 第1楼 zzhh612 | 发表于 2008-03-29 20:17 |
| 中级用户 发帖 103 积分 278 | |
|
如何按行读取多个文本文件来实现文本的合并 按行读取多个文本文本文件到一新的文件中(也即文本文件的合并)(要求能原样输出文件中的空行及前导和行尾空白),本人写了一个但空行被忽略了,而遇到含空格或制表符等的空白行时,则会向文件写入"echo 已经关闭"不知如何能解决这些问题?
@echo off setlocal EnableDelayedExpansion %=启用延迟变量=% dir/b/o:n *.txt>filelist.tmp %=得到文件列表=% type.>HBfile.txt %=先建立结果文件=% for /f "usebackq delims=" %%a in ("filelist.tmp") do ( %=得到一个文件名=% set filename=%%a %=将文件名赋于变量=% call :sub !filename! %=带参调用子过程=% ) del filelist.tmp %=完成后删除临时文件=% goto :eof %=退出=% :sub for /f "usebackq delims=" %%i in ("%1") do ( echo %%i>>HBfile.txt) %=将得到的内容写入结果文件=% echo.>>HBfile.txt %=在每一个文件完成后加入一空行=% goto :eof %=退出子过程=% |
|
| 第2楼 beeny | 发表于 2008-03-29 20:41 |
| 初级用户 发帖 49 积分 136 | |
|
用copy HBfile.txt+newfile.txt HBfile.txt
|
|
| 第3楼 bat-zw | 发表于 2008-03-29 20:46 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
问题没描述清楚: 我想:
1 可以用copy copy a.txt +b.txt+c.txt+...........+n.txt m.txt 2 使用find for %%i in (a,b,c,................,n) do ( for /f %%j "skip=2 tokens=*" in ('find /v "******" %%i.txt') do ( echo %%j >>m.txt ) ) [ Last edited by zw19750516 on 2008-3-29 at 08:52 PM ] |
|
| 第4楼 balinger | 发表于 2008-03-29 20:56 |
| 中级用户 发帖 115 积分 356 | |
|
@echo off
for /f "delims=" %%i in ('dir /s/b/a-d *.txt') do (more "%%i" >>合并.txt) pause |
|
| 第5楼 zzhh612 | 发表于 2008-03-29 22:32 |
| 中级用户 发帖 103 积分 278 | |
|
谢谢各位,是我把问题想复杂了,
我的本意是要建立一个文本文件合并与分割的批处理,在合并时将每个文件之间加入一个分隔标志的行,以便于在以后分割时作为标记.这个标志例如: -----------------*.TXT------------------- 以后在分割时,先从中提取出文件名,然后将下一部分内容写入到这个文件中,从而完成分割出一个文件.这样多个文件在经过合并再分割后,能完全恢复到原来的状态. 不过这个批处理我还没有写出来.... 因为分割文件似乎要难一些了? [ Last edited by zzhh612 on 2008-3-29 at 10:37 PM ] |
|
| 第6楼 balinger | 发表于 2008-03-29 22:45 |
| 中级用户 发帖 115 积分 356 | |
|
@echo off
for /f "delims=" %%i in ('dir /s/b/a-d *.txt') do ( echo -----------------%%~nxi------------------- more "%%i" echo -----------------%%~nxi------------------- )>>合并.txt |
|
| 第7楼 zzhh612 | 发表于 2008-03-29 22:53 |
| 中级用户 发帖 103 积分 278 | |
|
谢谢balinger的代码.
你的代码符符合我的意思,分割开来我却搞不定 主要是从中提取出文件名,并在两个标记间提取出文本,这一定要按行读取了, 这又涉及到了空行和空白行的问题了 |
|
| 第8楼 zerocq | 发表于 2008-03-29 22:57 |
| 中级用户 发帖 196 积分 458 | |
|
# 显示两个正则表达式之间的文本(包含)
sed -n '/Iowa/,/Montana/p' 这应该可以提取文件名之间的内容吧 |
|
| 第9楼 qzwqzw | 发表于 2008-03-29 23:11 |
| 银牌会员 发帖 636 积分 2,343 | |
|
有一个gnu工具叫csplit可以实现复杂的文本分割
你可以找找看 |
|
| 第10楼 zzhh612 | 发表于 2008-03-30 01:13 |
| 中级用户 发帖 103 积分 278 | |
|
abcd的合并代码也不错,只是文件多时运行速度较balinger的代码要慢许多.
至于Csplit的分割工具,应用并不方便,我只是想用常用的批处理命令来 实现文件的分割,至于借助于其它第三方工具的,因为在使用上不太通行, 所以也没有去考虑了... 不知能否以通常的批处理命令或是VBSCRIPT批处理来实现分割呢? [ Last edited by zzhh612 on 2008-3-30 at 01:19 AM ] |
|
| 第11楼 slore | 发表于 2008-03-30 01:54 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
VBSCRIPT的字符处理能力很强。。。当然可以。。。分割
|
|
| 第12楼 terse | 发表于 2008-03-30 03:07 |
| 银牌会员 发帖 946 积分 2,404 | |
|
用P处理特殊字符不怎么样
合并的文件: 分割文件: |
|
| 第13楼 zzhh612 | 发表于 2008-03-30 12:51 |
| 中级用户 发帖 103 积分 278 | |
|
Terse的代码真是不错,比较符合我的本意,我用了100个文本文件试了一下,目前还没有发现什么错误.
看来我还要向你学习了,我是有思路,没技术,哈哈.. |
|
| 第14楼 taqiao | 发表于 2008-05-18 11:41 |
| 初级用户 发帖 19 积分 35 | |
|
支持
|
|
| 第15楼 knoppix7 | 发表于 2008-05-18 23:12 |
| 银牌会员 发帖 634 积分 1,287 来自 cmd.exe | |
|
find /V "" c:\*.txt
代用以下把 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |