Board logo

标题: [文本处理] [已解决]批处理怎么把多个TXT文件(字符比较长,10k-15k),合并到一个文本里 [打印本页]

作者: 13545876873    时间: 昨天 16:56     标题: [已解决]批处理怎么把多个TXT文件(字符比较长,10k-15k),合并到一个文本里

本帖最后由 13545876873 于 2024-10-22 10:21 编辑

我有很多TXT文件,需要把他们合并在一起,但发现字符小的文件(1k-3k)可以合并在一起,如下图:


       但字符数较大的文件(字符比较长,10k-15k),没能合并成功,文件已上传到网盘:https://wwfe.lanzoue.com/iWJv12d1o9je
                                                                                                       密码:4wc8

  我最后想得到的合并文件内容是:第一行是原TAT文本的名称,第二行是它的内容。按这种方式进行合并。

求大哥们帮忙解决:
作者: aloha20200628    时间: 昨天 18:06

本帖最后由 aloha20200628 于 2024-10-21 18:08 编辑

回复 1# 13545876873
  1. type *.txt>"按文件名字符升序合并.txt"
复制代码

作者: Kacastic    时间: 15 小时前

  1. type *.txt >>0合并.txt
复制代码

作者: qixiaobin0715    时间: 6 小时前

本帖最后由 qixiaobin0715 于 2024-10-22 09:57 编辑

上面方案欠妥,会把合并后的文件再合并一次:
  1. type *.txt>temp
  2. ren temp out.txt
复制代码
开始未看 源文件,好像这样也不行,文件中只有一行,且没有换行,还得想别的办法。
这样应当可行
  1. @echo off
  2. (for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  3.     echo,%%~ni
  4.     type "%%i"
  5.     echo,
  6. ))>temp
  7. ren temp out.txt
  8. pause
复制代码

作者: 13545876873    时间: 5 小时前

回复 2# aloha20200628
大哥,是我没把问题表述清楚
我最后想得到的合并文件内容是:第一行是原TAT文本的名称,第二行是它的内容。按这种方式进行合并。

   麻烦大哥再帮忙一下呢
作者: 13545876873    时间: 5 小时前

回复 4# qixiaobin0715
大哥,是我没把问题表述清楚
我需要把文档的名称,也导入合并文档里
作者: qixiaobin0715    时间: 5 小时前

回复 6# 13545876873
已修改
作者: hfxiang    时间: 5 小时前

本帖最后由 hfxiang 于 2024-10-22 10:10 编辑

回复 1# 13545876873

在命令行窗口下,用第3方工具gawk(http://bcn.bathome.net/tool/4.1.0/gawk.exe)的实现方式如下:
  1. gawk "FILENAME==\"out.txt\"{next}FNR==1{print FILENAME}1" *.txt>out.txt
复制代码

作者: 13545876873    时间: 5 小时前

回复 7# qixiaobin0715
可以了,完美解决了我的问题。
   感谢大哥的帮助
作者: 13545876873    时间: 4 小时前

回复 8# hfxiang
感谢大哥的帮助
作者: aloha20200628    时间: 4 小时前

本帖最后由 aloha20200628 于 2024-10-22 11:23 编辑

回复 5# 13545876873

再给一个版本,能自适应每个文本文件末尾是否有空行(无则加入空行有则忽略以免乱套)
另注》用 dir 列表结果可取其多种排序功能,灵活安排各文本文件的合并顺序(如按文件名升序或降序/创建时间/修改时间/...等),以下代码采用默认的文件名升序方式合并当前目录中的各文本文件...
  1. @echo off &(for /f "delims=" %%F in ('dir/b/a-d *.txt') do (echo,%%~nF&type "%%F"&findstr /v $ "%%F">nul &&echo,))>"txt.all" 2>nul
  2. ren "txt.all" "合并.txt"&pause&exit/b
复制代码

作者: 13545876873    时间: 3 小时前

本帖最后由 13545876873 于 2024-10-22 11:55 编辑

回复 11# aloha20200628
感谢大哥的帮助,这个也可以实现我想要的功能
       我突然想到一个问题:合并文档的第一行,和第二行,
          能否实现用  Tab 键换行,而不是用Enter键换行
如果用Tab 键换行,把合并之后的内容复制的excel表里,可以这样呈现:第一列是txt文档名称,第二列是相应的内容
作者: aloha20200628    时间: 3 小时前

回复 12# 13545876873

试试以下这个版本
  1. @echo off &(for /f "delims=" %%F in ('dir/b/a-d *.txt') do (set/p="%%~nF "<nul&type "%%F"&findstr /v $ "%%F">nul &&echo,))>"txt.all" 2>nul
  2. ren "txt.all" "合并.txt"&pause&exit/b
复制代码

作者: 13545876873    时间: 1 小时前

回复 13# aloha20200628
可以完美解决我的问题,感谢大哥的帮助
作者: qixiaobin0715    时间: 半小时前

  1. @echo off
  2. set _out.txt=true
  3. (for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  4.     if not defined _%%i (
  5.         set /p=%%~ni <nul
  6.         type "%%i"
  7.         echo,
  8.     )
  9. ))>out.txt
  10. pause
复制代码





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