Board logo

标题: [文本处理] 求个批量合并文件夹下所有TXT的批处理 [打印本页]

作者: 修修的想法    时间: 2018-8-8 15:49     标题: 求个批量合并文件夹下所有TXT的批处理

合并完 可以自定义在每行后加文字 每个TXT大概500行 一共10到30个txt 有重复的同行数字 需要去除
作者: 修修的想法    时间: 2018-8-8 15:50

[attach]11387[/attach]
作者: 修修的想法    时间: 2018-8-8 15:54

合并后是这样的效果 同行数字没有重复的 加后缀@qq.com
作者: rack    时间: 2018-8-8 18:00

type *.txt>>f:\hb.txt   这是合并,加后缀用工具好弄些
有这种工具的
作者: 修修的想法    时间: 2018-8-9 07:32

回复 4# rack

合并后的文件是空的  最好你能在本目录下 不用指定其他目录
作者: rack    时间: 2018-8-9 08:00

本帖最后由 rack 于 2018-8-9 11:13 编辑

回复 5# 修修的想法


    type *.txt>>hb.txt
把这个命令做成BAT

要合并的txt文件与这个bat文件放一个文件夹,然后点这个BAT就可

其实你这个用品轩字典生成器可以全部完成
作者: 修修的想法    时间: 2018-8-9 10:52

回复 6# rack


合并后的文件都是空的 没有内容
作者: xczxczxcz    时间: 2018-8-9 11:29

太简单了,大神不愿写。
作者: 修修的想法    时间: 2018-8-9 11:41

回复 8# xczxczxcz
  


估计是
作者: xczxczxcz    时间: 2018-8-9 12:33

本帖最后由 xczxczxcz 于 2018-8-9 13:45 编辑

偶不是大神,不过这个确实简单

不考虑txt文件的排名顺序:
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set /p 添加尾数= 输入你要在每行末尾添加的字符并回车:
  4. del /q "%~dp0合并.txt">nul 2>nul
  5. cd.>"%temp%\合并.txt"
  6. for /f "delims=" %%a in ('dir/b "*.txt"') do (
  7.       for /f "delims=" %%i in ('type "%%a"') do (
  8.       for /f "delims=" %%m in (%temp%\合并.txt) do if /i "%%i" == "%%m" set "真假=TRUE"
  9.   if /i "!真假!" neq "TRUE" echo %%i>>"%temp%\合并.txt"
  10.   set "真假="
  11. )
  12. )
  13. cd.>"%~dp0合并.txt"
  14. for /f "delims=" %%a in (%temp%\合并.txt) do echo %%a%添加尾数%>>"%~dp0合并.txt"
  15. del /q "%temp%\合并.txt"
  16. pause
复制代码
把批处理放在你的放txt的,txt文件名可以有空格
如要考虑顺序的话前面要改一改。
作者: xczxczxcz    时间: 2018-8-10 08:17

给你来个好点的

文件夹 文件名 都支持空格,可以随意起名。把下面命令保存为 【合并文本.cmd】即可。也可任意取。
批处理放在电脑的任意位置,把你的文件夹拖到该批处理上即可。
新方法比原来的要快些。
  1. @echo off & setlocal EnableDelayedExpansion
  2. for /f "delims=" %%a in ("%~1\..") do set "保存位置=%%~fa"
  3. del /q "%保存位置%\合并.txt">nul 2>nul
  4. cd.>"%temp%\合并.txt"
  5. set /p 添加文字= 输入你要在每行末尾添加的字符并回车:
  6. for /f "delims=" %%a in ('dir/b "%~1\*.txt"') do (
  7.       for /f "delims=" %%i in ('type "%~1\%%a"') do (
  8.       set/p=合并文本   → %%i <nul
  9.       call :LOOP %%i
  10.   if /i "!重复!" neq "TRUE" (echo. & echo %%i%添加文字%>>"%temp%\合并.txt") else echo ——重复
  11.   set "重复="
  12. )
  13. )
  14. echo.
  15. move /y "%temp%\合并.txt" "%保存位置%\"
  16. set/p=文件保存在 [%保存位置%] 目录下<nul & pause & exit
  17. :LOOP
  18. for /f "delims=" %%m in (%temp%\合并.txt) do if /i "%%i%添加文字%" == "%%m" (set "重复=TRUE" & goto :eof )
  19. goto :eof
复制代码
==================================
作者: Batcher    时间: 2018-8-10 14:47

回复 11# xczxczxcz
  1. @echo off
  2. set "StrSuffix=@qq.com"
  3. (for %%a in (*.txt) do (
  4.     for /f "delims=" %%i in ('type "%%a"') do (
  5.         if not defined %%i (
  6.             echo,%%i%StrSuffix%
  7.             set %%i=1
  8.         )
  9.     )
  10. ))>"合并.log"
复制代码
这样可以减少一层for循环
作者: 修修的想法    时间: 2018-8-10 15:47

回复 10# xczxczxcz


大神 回车无反应
作者: 修修的想法    时间: 2018-8-10 15:47

回复 12# Batcher


大神  代码不知道什么错误  会把路径都带上了
作者: 修修的想法    时间: 2018-8-10 15:49

回复 11# xczxczxcz

6666666666 没什么问题  就是感觉稍微有点慢
作者: 修修的想法    时间: 2018-8-10 15:51

回复 11# xczxczxcz


对了不知为何 合并的衔接处 第一行会有个乱码 文字
作者: xczxczxcz    时间: 2018-8-10 16:12

回复 16# 修修的想法

乱码一般是你的TXT文件不是ANSI编码的。 偶测试没问题,没有乱码。

现用 版主优化的。用not defined 代替 for 遍列循环。
  1. @echo off & setlocal EnableDelayedExpansion
  2. for /f "delims=" %%a in ("%~1\..") do set "保存位置=%%~fa"
  3. del /q "%保存位置%\合并.txt">nul 2>nul
  4. cd.>"%temp%\合并.txt"
  5. set /p 添加文字= 输入你要在每行末尾添加的字符并回车:
  6. for /f "delims=" %%a in ('dir/b "%~1\*.txt"') do (
  7.       for /f "delims=" %%i in ('type "%~1\%%a"') do (
  8.       set/p=合并文本   → %%i <nul
  9.   if not defined %%i (echo.&echo %%i%添加文字%>>"%temp%\合并.txt") else echo ——重复
  10.   set "%%i=#"
  11. )
  12. )
  13. echo.
  14. move /y "%temp%\合并.txt" "%保存位置%\"
  15. set/p=文件保存在 [%保存位置%] 目录下<nul & pause & exit
复制代码
偶测试 速度嗖嗖的。
作者: xczxczxcz    时间: 2018-8-10 16:15

回复 12# Batcher

用 defined 代替 loop那个 for 循环后,速度快了好多。
作者: Batcher    时间: 2018-8-10 16:55

回复 14# 修修的想法


    我这边测试没有发现问题。把你的测试代码和测试结果发出来看看
作者: 修修的想法    时间: 2018-8-10 18:49

回复 19# Batcher

可以啦 可以啦  真是大神 都是编码的问题  不知为何TXT都是utf-8格式

能不能有个提前都把TXT调整成  ANSI格式的 批处理
作者: 修修的想法    时间: 2018-8-10 18:49

回复 17# xczxczxcz


感谢 感谢 一个个测试了 确实是 格式的问题
作者: xczxczxcz    时间: 2018-8-11 15:27

回复  xczxczxcz


感谢 感谢 一个个测试了 确实是 格式的问题
修修的想法 发表于 2018-8-10 18:49
  1. @echo off
  2. for /f "delims=" %%a in ("%~1\..") do set "保存位置=%%~fa"
  3. cd.>"%保存位置%\合并.txt"
  4. set /p 添加文字= 输入你要在每行末尾添加的字符并回车:
  5. for /f "delims=" %%a in ('dir/b "%~1\*.txt"') do (
  6.    iconv -c -s -f utf-8 -t gbk "%~1\%%a">"%~1\%%a.tmp"
  7.       for /f "delims=" %%i in ('type "%~1\%%a.tmp"') do (
  8.       set/p=合并文本   → %%i <nul
  9.   if not defined %%i (echo.&echo %%i%添加文字%>>"%保存位置%\合并.txt") else echo ——重复
  10.   set "%%i=#"
  11. )
  12. )
  13. echo.
  14. del /q "%~1\*.tmp"
  15. set/p=文件保存在 [%保存位置%] 目录下<nul & pause & exit
复制代码
这个带了转码的。到官网下载 iconv.exe 或在本坛下载 win_iconv.exe 放到 系统 system32目录下。或与批处理放在一起。

作者: 修修的想法    时间: 2018-8-12 13:43

回复 22# xczxczxcz


@echo off

for /f "delims=" %%a in ("%~1\..") do set "保存位置=%%~fa"
cd.>"%保存位置%\合并.txt"
set /p 添加文字= 输入你要在每行末尾添加的字符并回车:
for /f "delims=" %%a in ('dir/b "%~1\*.txt"') do (
   iconv -c -s -f utf-8 -t gbk "%~1\%%a">"%~1\%%a.tmp"
      for /f "delims=" %%i in ('type "%~1\%%a.tmp"') do (
              set/p=合并文本   → %%i <nul
                  if not defined %%i (echo.&echo %%i%添加文字%>>"%保存位置%\合并.txt") else echo ——重复
                  set "%%i=#"
                )
        )
echo.
del /q "%~1\*.tmp"
set/p=文件保存在 [%保存位置%] 目录下<nul & pause & exit

@echo off
setlocal enabledelayedexpansion
set filenames=0
set numbers=0
set 每个文件几个帐号=1000
set filename=1
for /f "delims=" %%a in (合并.txt) do (
        set /a numbers+=1
        set /a filenames+=1
        echo %%a>>!filename!.txt
        if !numbers! geq !每个文件几个帐号! (
                set /a filename+=1
                set numbers=0
                )
)

大神请教下 如何把这两个合并一起使用啊   我合并后没什么作用   本意就是 之前合并去重后再把这个文本按照每个1000行分成多个TXT  最好自定义命名
作者: 修修的想法    时间: 2018-8-12 13:44

回复 22# xczxczxcz


你说的那个编码问题都解决  感谢
作者: xczxczxcz    时间: 2018-8-12 14:20

回复 24# 修修的想法

不要用于违法活动。虽然偶很少用 qq
  1. @echo off
  2. for /f "delims=" %%a in ("%~1\..") do set "保存位置=%%~fa"
  3. cd.>"%保存位置%\合并.txt"
  4. set /p 添加文字= 输入你要在每行末尾添加的字符并回车:
  5. for /f "delims=" %%a in ('dir/b "%~1\*.txt"') do (
  6.    iconv -c -s -f utf-8 -t gbk "%~1\%%a">"%~1\%%a.tmp"
  7.       for /f "delims=" %%i in ('type "%~1\%%a.tmp"') do (
  8.       set/p=合并文本   → %%i <nul
  9.   if not defined %%i (echo.&echo %%i%添加文字%>>"%保存位置%\合并.txt") else echo ——重复
  10.   set "%%i=#"
  11. )
  12. )
  13. echo.
  14. del /q "%~1\*.tmp"
  15. setlocal EnableDelayedExpansion
  16. set/a file+=1
  17. for /f "delims=" %%a in (%保存位置%\合并.txt) do (
  18.   set/a number+=1
  19.   if !number! LEQ 1 set/p var=请输入第 !file! 文本的名称,回车继续:
  20.   if !number! LEQ 1000 echo %%a>>!var!.txt
  21.   if !number! EQU 1000 (set/a number=0 & set/a file+=1)
  22.   )
  23. Endlocal
  24. pause & exit
复制代码

作者: 修修的想法    时间: 2018-8-12 15:39

回复 25# xczxczxcz

  不违法 哈哈 运行后没有什么反应...
作者: xczxczxcz    时间: 2018-8-12 16:18

回复 26# 修修的想法

把你要处理的那个文件夹拖上来,是一起处理的。不是单个运行的。




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