标题: [文本处理] [已解决]求2个txt文件合并到1个txt文件,不改动里面的格式 [打印本页]
作者: zhangpwr 时间: 2020-3-23 17:24 标题: [已解决]求2个txt文件合并到1个txt文件,不改动里面的格式
本帖最后由 zhangpwr 于 2020-3-23 19:49 编辑
求助大佬,文件夹内有1000多个txt文件,现需要将2个txt合并成一个新的txt文件,名称无所谓,内容排版,还按之前文本内容排版换行即可。
另外如果想在合并时将文本内容少于500个汉字文本合并,多于500汉字的文本不合并,可以实现嘛?
作者: wujunkai 时间: 2020-3-23 17:40
回复 1# zhangpwr
请问,合并的时候是随便找两个文件合并,还是对象有特定关系。
请把这些讲清楚,能发两个例子上来更好了。
作者: zhangpwr 时间: 2020-3-23 17:50
回复 2# wujunkai
谢谢,随便2个文件合并就好
现有文件格式 百川右地.txt 砂不不为中是不.txt(名称都无序)
生成新的文件格式可以用数字排序
作者: wujunkai 时间: 2020-3-23 18:33
回复 3# zhangpwr - @echo off
- @setlocal enabledelayedexpansion
-
- set num=0
- set name=0000
-
- :main
- ( for /R %%i in (*.txt) do echo %%i)>files.tmp
- call:fopen files.tmp file
- set /A len=fopen_len-1
- for /L %%i in (0,2,%len%) do (
- set one=%%i
- set /A two=!one!+1
- if !two! LSS %len% call:marge !one! !two!
- )
- pause
- goto:eof
-
- :fopen
- rem %~1 为读取文件名,%~2为储存的变量名
- rem 采用数组的方式储存,不储存换行符
- rem 若无%~2,使用%~n1作为储存的变量名
- set fopen_file=%~1
- if "%~2"=="" (set fopen_vale=%~n1) else (set fopen_vale=%~2)
- set fopen_len=0
- for /F "tokens=1* delims=:" %%i in ('findstr /n .* %fopen_file%') do (
- set %fopen_vale%[!fopen_len!]=%%j
- set /A fopen_len+=1
- )
- goto:eof
-
- :marge
- set /A num+=1
- call:int
- type !file[%~1]! > %name%.txt
- echo=>>%name%.txt
- type !file[%~2]! >> %name%.txt
- echo 已合并!file[%~1]! ^& !file[%~2]!
- goto:eof
-
- :int
- rem 统一格式
- set name=00000%num%
- set name=%name:~-4%
- goto:eof
复制代码
判断500个字符略显复杂,有空我再想想。
作者: zhangpwr 时间: 2020-3-23 18:46
本帖最后由 zhangpwr 于 2020-3-23 18:51 编辑
如果不能按字符判断,那按行数判断呢?
比如只合并文档行数为多少以内的2个文本为一个
如果可以实现,麻烦告诉下哪里控制行数,我好调整
作者: wujunkai 时间: 2020-3-23 19:27
回复 6# zhangpwr
我的程序会先生成一个 files.tmp 用来储存文件名。
你可以用以下代码来处理大小限制。- (for /F "tokens=*" %%i in ('type files.tmp') do if %%~zi LEQ 1000 echo %%i )>files.tmp
复制代码
1000是一个500中文字符的文件以ansi储存时的大小(1000B)。
行数那个拿去问大佬吧,我只有一个大概思路 (findstr /N .*).
然后图片中的问题应该是少了“”导致的,自己在两个type那里把路径加一下引号。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |