Board logo

标题: [文本处理] 批处理按行合并多个二进制文件 [打印本页]

作者: zhua1987    时间: 2011-4-12 22:14     标题: 批处理按行合并多个二进制文件

问题:
文件夹H:\test下有500个二进制文件(名字均不规则),用编辑器打开,内容格式如下:
34.all 文件:

res:1,2,3,
CQR:m,n,_,
WIM:w,w,w,

21.all 文件:

res:4,5,6,
CQR:q,_,s,
WIM:r,r,r,

对这500个文件逐行合并,生成文件如下:

res:1,2,3,res:4,5,6,
CQR:m,n,_,CQR:q,_,s,
WIM:w,w,w,WIM:r,r,r,

如果可以合并成这样:

res:1,2,3,4,5,6,
CQR:m,n,_,q,_,s,
WIM:w,w,w,r,r,r,

就更好了,非常感谢!!
作者: zhua1987    时间: 2011-4-12 22:24

跪求解答~~
作者: CrLf    时间: 2011-4-12 22:36

如果行数多,而且每个文件末都有回车,可以这样:
  1. @echo off
  2. for %%a in (h:\test\*.all) do (
  3.    for /f "useback tokens=1* delims=:" %%b in ('findstr /n .* "%%a"') do (
  4.       set /p=%%c<nul>%%b.tmp
  5.    )
  6.    echo;
  7. )
  8. copy /b *.tmp h:\test\合并.all
  9. del /f /q *.tmp
复制代码
如果文件行数少,而且文件末均有回车符,可以这样:
  1. @echo off
  2. findstr /n .* h:\test\*.all>tmp
  3. (for /l %%a in (0 1 100) do (
  4.    for /f "tokens=2* delims=:" %%b in ('findsr "^[^:]:%%a:" tmp') do set /p=%%c<nul)>h:\test\合并.all
  5.    echo;
  6. )
复制代码
如果文件短,并且不确定是否以回车结尾,可以这样:
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (h:\test\*.all) do (
  3.    if "!m!" lss "!n!" set m=n
  4.    set n=
  5.    for /f "delims=" %%b in ("%%a") do (
  6.       set /a n+=1
  7.       for %%z in (@!n!) do set @!n!=!%%z!%%b
  8.       )
  9.    )
  10. (for /l %%a in (1 1 %m%) do echo;!@%%a!)>h:\test\合并.all
复制代码
以上均为思路,并未实战测试
作者: broly    时间: 2011-4-12 23:12

二进制文件?然后用编辑器打开是文本?
作者: caruko    时间: 2011-4-12 23:56

二进制文件? 只怕批处理无能为力。
如果只是简单的 合并,copy /b f1+f2+f3 fnew
作者: zhua1987    时间: 2011-4-12 23:59

4# broly
恩,用记事本打开会有一些黑色方块;用写字板或EditPlus等打开才能正常显示
作者: zhua1987    时间: 2011-4-13 00:05

3# zm900612
没想到这么快就有回复,还是非常感谢的!!
三种方法我都试过了,还是不行
期待您的改进,再次感谢!!

P.S.每个文件内容都是8行,列数不定,最多有上百列,但同一文件中每行的列数都相同
作者: hanyeguxing    时间: 2011-4-13 07:13

1,不要跪求,没人能受得起
2,最好上传一个文件做示例
作者: techon    时间: 2011-4-13 14:33

批处理处理二进制文件 有难度 恐怕要第三方程序了
作者: broly    时间: 2011-4-13 15:08

发一下样本。。。我有空用VBS或者C试试




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2