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

[文本处理] 求个批量合并文件夹下所有TXT的批处理

[复制链接]
 楼主| 发表于 2018-8-10 15:51:17 | 显示全部楼层
回复 11# xczxczxcz


对了不知为何 合并的衔接处 第一行会有个乱码 文字
发表于 2018-8-10 16:12:54 | 显示全部楼层
回复 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
复制代码
偶测试 速度嗖嗖的。

评分

参与人数 1技术 +1 收起 理由
修修的想法 + 1 厉害了大神

查看全部评分

发表于 2018-8-10 16:15:54 | 显示全部楼层
回复 12# Batcher

用 defined 代替 loop那个 for 循环后,速度快了好多。
发表于 2018-8-10 16:55:35 | 显示全部楼层
回复 14# 修修的想法


    我这边测试没有发现问题。把你的测试代码和测试结果发出来看看
 楼主| 发表于 2018-8-10 18:49:05 | 显示全部楼层
回复 19# Batcher

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

能不能有个提前都把TXT调整成  ANSI格式的 批处理
 楼主| 发表于 2018-8-10 18:49:41 | 显示全部楼层
回复 17# xczxczxcz


感谢 感谢 一个个测试了 确实是 格式的问题
发表于 2018-8-11 15:27:42 | 显示全部楼层
回复  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目录下。或与批处理放在一起。

评分

参与人数 1技术 +1 收起 理由
修修的想法 + 1 很好的个大神 哈哈

查看全部评分

 楼主| 发表于 2018-8-12 13:43:27 | 显示全部楼层
回复 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:09 | 显示全部楼层
回复 22# xczxczxcz


你说的那个编码问题都解决  感谢
发表于 2018-8-12 14:20:38 | 显示全部楼层
回复 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:06 | 显示全部楼层
回复 25# xczxczxcz

  不违法 哈哈 运行后没有什么反应...
发表于 2018-8-12 16:18:18 | 显示全部楼层
回复 26# 修修的想法

把你要处理的那个文件夹拖上来,是一起处理的。不是单个运行的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 17:24 , Processed in 0.019967 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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