找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24496|回复: 5

[文本处理] [已解决]求2个txt文件合并到1个txt文件,不改动里面的格式

[复制链接]
发表于 2020-3-23 17:24:09 | 显示全部楼层 |阅读模式
本帖最后由 zhangpwr 于 2020-3-23 19:49 编辑

求助大佬,文件夹内有1000多个txt文件,现需要将2个txt合并成一个新的txt文件,名称无所谓,内容排版,还按之前文本内容排版换行即可。

另外如果想在合并时将文本内容少于500个汉字文本合并,多于500汉字的文本不合并,可以实现嘛?
发表于 2020-3-23 17:40:11 | 显示全部楼层
回复 1# zhangpwr


    请问,合并的时候是随便找两个文件合并,还是对象有特定关系。
    请把这些讲清楚,能发两个例子上来更好了。
 楼主| 发表于 2020-3-23 17:50:34 | 显示全部楼层
回复 2# wujunkai


    谢谢,随便2个文件合并就好

现有文件格式   百川右地.txt    砂不不为中是不.txt(名称都无序)
生成新的文件格式可以用数字排序
发表于 2020-3-23 18:33:55 | 显示全部楼层
回复 3# zhangpwr
  1. @echo off
  2. @setlocal enabledelayedexpansion

  3. set num=0
  4. set name=0000

  5. :main
  6.     ( for /R %%i in (*.txt) do echo %%i)>files.tmp
  7.     call:fopen files.tmp file
  8.     set /A len=fopen_len-1
  9.     for /L %%i in (0,2,%len%) do (
  10.         set one=%%i
  11.         set /A two=!one!+1
  12.         if !two! LSS %len% call:marge !one! !two!
  13.     )
  14. pause
  15. goto:eof

  16. :fopen
  17.     rem %~1 为读取文件名,%~2为储存的变量名
  18.     rem 采用数组的方式储存,不储存换行符
  19.     rem 若无%~2,使用%~n1作为储存的变量名
  20.     set fopen_file=%~1
  21.     if "%~2"=="" (set fopen_vale=%~n1) else (set fopen_vale=%~2)
  22.     set fopen_len=0
  23.     for /F "tokens=1* delims=:" %%i in ('findstr /n .* %fopen_file%') do (
  24.         set %fopen_vale%[!fopen_len!]=%%j
  25.         set /A fopen_len+=1
  26.     )
  27. goto:eof

  28. :marge
  29.     set /A num+=1
  30.     call:int
  31.     type !file[%~1]! > %name%.txt
  32.     echo=>>%name%.txt
  33.     type !file[%~2]! >> %name%.txt
  34.     echo 已合并!file[%~1]! ^& !file[%~2]!
  35. goto:eof

  36. :int
  37.     rem 统一格式
  38.     set name=00000%num%
  39.     set name=%name:~-4%
  40. goto:eof
复制代码
判断500个字符略显复杂,有空我再想想。

评分

参与人数 1技术 +1 收起 理由
zhangpwr + 1 感谢大佬

查看全部评分

 楼主| 发表于 2020-3-23 18:46:46 | 显示全部楼层
本帖最后由 zhangpwr 于 2020-3-23 18:51 编辑

如果不能按字符判断,那按行数判断呢?
比如只合并文档行数为多少以内的2个文本为一个

如果可以实现,麻烦告诉下哪里控制行数,我好调整
发表于 2020-3-23 19:27:14 | 显示全部楼层
回复 6# zhangpwr


    我的程序会先生成一个 files.tmp 用来储存文件名。
    你可以用以下代码来处理大小限制。
  1. (for /F "tokens=*" %%i in ('type files.tmp') do if %%~zi LEQ 1000 echo %%i )>files.tmp
复制代码
1000是一个500中文字符的文件以ansi储存时的大小(1000B)。
    行数那个拿去问大佬吧,我只有一个大概思路 (findstr /N .*).
    然后图片中的问题应该是少了“”导致的,自己在两个type那里把路径加一下引号。

评分

参与人数 1技术 +1 收起 理由
zhangpwr + 1 非常感谢

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 17:00 , Processed in 0.016634 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表