标题: [文本处理] 求个批量合并文件夹下所有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文件的排名顺序:- @echo off
- setlocal EnableDelayedExpansion
- set /p 添加尾数= 输入你要在每行末尾添加的字符并回车:
- del /q "%~dp0合并.txt">nul 2>nul
- cd.>"%temp%\合并.txt"
- for /f "delims=" %%a in ('dir/b "*.txt"') do (
- for /f "delims=" %%i in ('type "%%a"') do (
- for /f "delims=" %%m in (%temp%\合并.txt) do if /i "%%i" == "%%m" set "真假=TRUE"
- if /i "!真假!" neq "TRUE" echo %%i>>"%temp%\合并.txt"
- set "真假="
- )
- )
- cd.>"%~dp0合并.txt"
- for /f "delims=" %%a in (%temp%\合并.txt) do echo %%a%添加尾数%>>"%~dp0合并.txt"
- del /q "%temp%\合并.txt"
- pause
复制代码
把批处理放在你的放txt的,txt文件名可以有空格
如要考虑顺序的话前面要改一改。
作者: xczxczxcz 时间: 2018-8-10 08:17
给你来个好点的
文件夹 文件名 都支持空格,可以随意起名。把下面命令保存为 【合并文本.cmd】即可。也可任意取。
批处理放在电脑的任意位置,把你的文件夹拖到该批处理上即可。
新方法比原来的要快些。- @echo off & setlocal EnableDelayedExpansion
-
- for /f "delims=" %%a in ("%~1\..") do set "保存位置=%%~fa"
- del /q "%保存位置%\合并.txt">nul 2>nul
- cd.>"%temp%\合并.txt"
- set /p 添加文字= 输入你要在每行末尾添加的字符并回车:
- for /f "delims=" %%a in ('dir/b "%~1\*.txt"') do (
- for /f "delims=" %%i in ('type "%~1\%%a"') do (
- set/p=合并文本 → %%i <nul
- call :LOOP %%i
- if /i "!重复!" neq "TRUE" (echo. & echo %%i%添加文字%>>"%temp%\合并.txt") else echo ——重复
- set "重复="
- )
- )
- echo.
- move /y "%temp%\合并.txt" "%保存位置%\"
- set/p=文件保存在 [%保存位置%] 目录下<nul & pause & exit
-
- :LOOP
- for /f "delims=" %%m in (%temp%\合并.txt) do if /i "%%i%添加文字%" == "%%m" (set "重复=TRUE" & goto :eof )
- goto :eof
复制代码
==================================
作者: Batcher 时间: 2018-8-10 14:47
回复 11# xczxczxcz - @echo off
- set "StrSuffix=@qq.com"
- (for %%a in (*.txt) do (
- for /f "delims=" %%i in ('type "%%a"') do (
- if not defined %%i (
- echo,%%i%StrSuffix%
- set %%i=1
- )
- )
- ))>"合并.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 遍列循环。- @echo off & setlocal EnableDelayedExpansion
-
- for /f "delims=" %%a in ("%~1\..") do set "保存位置=%%~fa"
- del /q "%保存位置%\合并.txt">nul 2>nul
- cd.>"%temp%\合并.txt"
- set /p 添加文字= 输入你要在每行末尾添加的字符并回车:
- for /f "delims=" %%a in ('dir/b "%~1\*.txt"') do (
- for /f "delims=" %%i in ('type "%~1\%%a"') do (
- set/p=合并文本 → %%i <nul
- if not defined %%i (echo.&echo %%i%添加文字%>>"%temp%\合并.txt") else echo ——重复
- set "%%i=#"
- )
- )
- echo.
- move /y "%temp%\合并.txt" "%保存位置%\"
- 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
- @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
复制代码
这个带了转码的。到官网下载 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
- @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"
- setlocal EnableDelayedExpansion
- set/a file+=1
- for /f "delims=" %%a in (%保存位置%\合并.txt) do (
- set/a number+=1
- if !number! LEQ 1 set/p var=请输入第 !file! 文本的名称,回车继续:
- if !number! LEQ 1000 echo %%a>>!var!.txt
- if !number! EQU 1000 (set/a number=0 & set/a file+=1)
- )
- Endlocal
- 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 |