[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何合并指定序号的文本数据,并在每行数据前加上指定字符?

有63个txt文本,序号为01至63,每个文本里只有一行0-9的数据,数字间没有空格,现在需要将63个txt文本分为3组,分别合并成3个txt文本。其中:

序号为01、02、03、04、05、07、08、09、10、12、13、14、16、17、19、22、23、24、25、26、28、29、30、31、33、34、35、37、38、40、43、44、45、46、47、49、50、51、52、54、55、56、58、59、61 的txt文本(45个)合并为一个txt文本,批处理后新建txt文本,命名为123456。

序号为07、08、09、10、11、12、13、14、15、16、17、18、19、20、21、28、29、30、31、32、33、34、35、36、37、38、39、40、41、42、49、50、51、52、53、54、55、56、57、58、59、60、61、62、63 的txt文本(45个)合并为一个txt文本,批处理后新建txt文本,命名为234567。

序号为06、27、48 这3个txt文本合并为一个txt文本,批处理后新建txt文本,命名为17。

另外,在合并后的前2个文本里,每行前依次加上如下字符:
1+2=
1+3=
1+4=
1+5=
1+6=
2+3=
2+4=
2+5=
2+6=
3+4=
3+5=
3+6=
4+5=
4+6=
5+6=
1-2=
1-3=
1-4=
1-5=
1-6=
2-3=
2-4=
2-5=
2-6=
3-4=
3-5=
3-6=
4-5=
4-6=
5-6=
1*2=
1*3=
1*4=
1*5=
1*6=
2*3=
2*4=
2*5=
2*6=
3*4=
3*5=
3*6=
4*5=
4*6=
5*6=

在合并后的c组txt文本里,每行依次加上这样的字符:
1+2=
1-2=
1*2=

拿c组举例:合并前
06序号的txt文本:123456
27序号的txt文本:569
48序号的txt文本:06789

合并后  命名为17的txt文本:
1+2=123456
1-2=569
1*2=06789

真诚希望热心的大师们出手相助。

是不是每个txt只有一行?

TOP

是的,每个txt只有一行。谢谢关注!

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%a in ('more +18 %~0') do set/a n+=1&set _!n!=%%a
  3. set #=01 02 03 04 05 07 08 09 10 12 13 14 16 17 19 22 23 24 25 26 28 29 30 31 33 34 35 37 38 40 43 44 45 46 47 49 50 51 52 54 55 56 58 59 61
  4. call :lp 0 123456
  5. set #=07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
  6. call :lp 0 234567
  7. set #=06 27 48
  8. call :lp 45 17
  9. goto :eof
  10. :lp
  11. set nn=%1
  12. (for %%a in (!#!) do (
  13.   set _=
  14.   set/p _=<%%a.txt
  15.   set/a nn+=1
  16.   call echo,%%_!nn!%%!_!
  17.   ))>%2.txt
  18. goto :eof
  19. 1+2=
  20. 1+3=
  21. 1+4=
  22. 1+5=
  23. 1+6=
  24. 2+3=
  25. 2+4=
  26. 2+5=
  27. 2+6=
  28. 3+4=
  29. 3+5=
  30. 3+6=
  31. 4+5=
  32. 4+6=
  33. 5+6=
  34. 1-2=
  35. 1-3=
  36. 1-4=
  37. 1-5=
  38. 1-6=
  39. 2-3=
  40. 2-4=
  41. 2-5=
  42. 2-6=
  43. 3-4=
  44. 3-5=
  45. 3-6=
  46. 4-5=
  47. 4-6=
  48. 5-6=
  49. 1*2=
  50. 1*3=
  51. 1*4=
  52. 1*5=
  53. 1*6=
  54. 2*3=
  55. 2*4=
  56. 2*5=
  57. 2*6=
  58. 3*4=
  59. 3*5=
  60. 3*6=
  61. 4*5=
  62. 4*6=
  63. 5*6=
  64. 1+2=
  65. 1-2=
  66. 1*2=
复制代码
1

评分人数

TOP

非常感谢!完美解决问题。速度也快。
由于我自己的不严谨,批处理产生的123456,234567,17这三个文本,其中命名为17的文本覆盖了原先存在的17文本,是否可以新建一个文件夹,将批处理产生的123456,234567,17这三个文本放入其中?
再次感谢!

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. md new
  3. for /f %%a in ('more +19 %~0') do set/a n+=1&set _!n!=%%a
  4. set #=01 02 03 04 05 07 08 09 10 12 13 14 16 17 19 22 23 24 25 26 28 29 30 31 33 34 35 37 38 40 43 44 45 46 47 49 50 51 52 54 55 56 58 59 61
  5. call :lp 0 123456
  6. set #=07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
  7. call :lp 0 234567
  8. set #=06 27 48
  9. call :lp 45 17
  10. goto :eof
  11. :lp
  12. set nn=%1
  13. (for %%a in (!#!) do (
  14.   set _=
  15.   set/p _=<%%a.txt
  16.   set/a nn+=1
  17.   call echo,%%_!nn!%%!_!
  18.   ))>new\%2.txt
  19. goto :eof
  20. 1+2=
  21. 1+3=
  22. 1+4=
  23. 1+5=
  24. 1+6=
  25. 2+3=
  26. 2+4=
  27. 2+5=
  28. 2+6=
  29. 3+4=
  30. 3+5=
  31. 3+6=
  32. 4+5=
  33. 4+6=
  34. 5+6=
  35. 1-2=
  36. 1-3=
  37. 1-4=
  38. 1-5=
  39. 1-6=
  40. 2-3=
  41. 2-4=
  42. 2-5=
  43. 2-6=
  44. 3-4=
  45. 3-5=
  46. 3-6=
  47. 4-5=
  48. 4-6=
  49. 5-6=
  50. 1*2=
  51. 1*3=
  52. 1*4=
  53. 1*5=
  54. 1*6=
  55. 2*3=
  56. 2*4=
  57. 2*5=
  58. 2*6=
  59. 3*4=
  60. 3*5=
  61. 3*6=
  62. 4*5=
  63. 4*6=
  64. 5*6=
  65. 1+2=
  66. 1-2=
  67. 1*2=
复制代码
1

评分人数

TOP

本帖最后由 apang 于 2012-7-3 14:55 编辑
  1. @echo off
  2. set str1=01 02 03 04 05 07 08 09 10 12 13 14 16 17 19 22 23 24 25 26 28 29 30 31 33 34 35 37 38 40 43 44 45 46 47 49 50 51 52 54 55 56 58 59 61
  3. set str2=07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
  4. set str3=06 27 48
  5. for /l %%a in (1 1 3) do (
  6.   if "%%a"=="3" (set v=2) else set v=6
  7.   setlocal enabledelayedexpansion
  8.   call :11 + - *
  9.   (for %%b in (!str%%a!) do (
  10.     for /f "delims=" %%c in (%%b.txt) do set/a m+=1&call echo %%.!m!%%=%%c
  11.   ))>%%a.txt
  12.   endlocal
  13. )
  14. md new 2>nul
  15. move 1.txt new\123456.txt
  16. move 2.txt new\234567.txt
  17. move 3.txt new\17.txt
  18. goto :eof
  19. :11
  20. for /l %%a in (1 1 !v!) do (
  21.   for /l %%b in (%%a 1 !v!) do (
  22.     if not %%b equ %%a set/a n+=1&set .!n!=%%a%1%%b
  23.   )
  24. )
  25. if not "%~2"=="" shift&goto 11
复制代码
1

评分人数

TOP

返回列表