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

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

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

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


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

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

求大哥们帮忙解决:
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

学习了,多位大佬分享方案!

TOP

回复 15# qixiaobin0715
这个也可以,非常感谢大哥们的帮助

TOP

  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
复制代码

TOP

回复 13# aloha20200628
可以完美解决我的问题,感谢大哥的帮助

TOP

回复 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
复制代码

TOP

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

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

TOP

本帖最后由 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
复制代码

TOP

回复 8# hfxiang
感谢大哥的帮助

TOP

回复 7# qixiaobin0715
可以了,完美解决了我的问题。
   感谢大哥的帮助

TOP

本帖最后由 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
复制代码
1

评分人数

TOP

回复 6# 13545876873
已修改

TOP

回复 4# qixiaobin0715
大哥,是我没把问题表述清楚
我需要把文档的名称,也导入合并文档里

TOP

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

   麻烦大哥再帮忙一下呢

TOP

本帖最后由 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
复制代码
1

评分人数

TOP

返回列表