Board logo

标题: [文本处理] [已解决]批处理如何实现多行合并成一行? [打印本页]

作者: yuanzheng    时间: 2011-3-9 02:35     标题: [已解决]批处理如何实现多行合并成一行?

本帖最后由 pcl_test 于 2016-11-9 17:48 编辑

a.txt文本内容如下:
===================================
11111111111
22222222222
33333333333
44444444444
55555555555
66666666666
77777777777
88888888888
99999999999
00000000000
.......................................

批处理后想得到的结果文件b.txt
====================================
11111111111;22222222222;33333333333;44444444444;55555555555;
66666666666;77777777777;88888888888;99999999999;00000000000
.............................


(注意:文本中的每行的字符数量不一样,意思就是说有长有短)


找到一个命令只是将全部行变为一行。代码如下,请参考...
  1. @echo off
  2.   :: 把多行文本拼接成用;连接的一行
  3.   :: <NUL 不能省略,省略掉就无法运行下去
  4.   for /f "tokens=*" %%i in (a.txt) do set /p "var=%%i;" >b.txt
  5.   exit
复制代码
[ 本帖最后由 yuanzheng 于 2011-3-9 13:21 编辑 ]
作者: hucuibai    时间: 2011-3-9 09:32

  1. @echo off
  2. for /f  %%a in (a.txt) do set /p=%%a;<nul>>b.txt
复制代码

作者: batman    时间: 2011-3-9 10:18

  1. @echo off&setlocal enabledelayedexpansion
  2. set /a num=1
  3. for /f "delims=" %%a in (a.txt) do (
  4.      set /a n+=1,m=n%%5
  5.      set "str=!str!%%a;"
  6.      if !m! equ 0 echo !str!>!num!.txt&set "str="&set /a num+=1
  7. )
  8. if defined str echo %str%>%num%.txt
复制代码

作者: Batcher    时间: 2011-3-9 11:02     标题: 回复 2楼 的帖子

你这是每5行合并成1行么?
作者: Commander    时间: 2011-3-9 11:19

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "SrcFile=a.txt"
  4. set "DstFile=b.txt"
  5. set "MergeNum=5"
  6. set "Delimiter=;"
  7. type nul>"%DstFile%"
  8. for /f "usebackq tokens=*" %%a in ("%SrcFile%") do (
  9.     set /a RowTotal+=1
  10.     set /a Count+=1
  11.     set "RowMerge=!RowMerge!%Delimiter%%%a"
  12.     if !Count! equ !MergeNum! (
  13.         >>"%DstFile%" echo,!RowMerge:~1!
  14.         set RowMerge=
  15.         set Count=0
  16.     )
  17. )
  18. set /a RowMod=RowTotal%%MergeNum
  19. if !RowMod! equ 0 (
  20.     goto :end
  21. )
  22. >>"%DstFile%" echo,!RowMerge:~1!
  23. :end
复制代码

作者: yuanzheng    时间: 2011-3-9 13:20

感谢大家。   Commander符合要求 。
作者: batman    时间: 2011-3-9 13:26     标题: 回复 6楼 的帖子

请楼主说说三楼哪里不符合要求?
作者: yuanzheng    时间: 2011-3-9 13:39     标题: 回复 7楼 的帖子

我想要的是输出一个文件。你的是输出多个文件。
作者: CrLf    时间: 2011-3-9 14:31

原先有点错,改下
  1. @echo off
  2. (for /f  %%a in (a.txt) do (
  3.     set /a n+=1,m=n%%5&set /p=%%a;<nul
  4.     set /a test=1/m||echo;
  5. ))>b,txt
复制代码

[ 本帖最后由 zm900612 于 2011-3-9 15:37 编辑 ]
作者: wc726842270    时间: 2011-3-9 14:56

不知道怎么样。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (2.txt) do (set /a n+=1
  3. set a=!a!%%i
  4. if !n! equ 5 (echo !a!>>输出文件.txt&&set n=&set a=)
  5. )
  6. pause
复制代码

作者: batman    时间: 2011-3-9 15:43     标题: 回复 8楼 的帖子

难道楼主自己就不能动一下手修改一下,就只习惯复制粘贴双击这三个动作?
作者: Batcher    时间: 2011-3-9 20:08     标题: 回复 10楼 的帖子

你找一个6行内容的文件试试?




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