[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理怎样合并txt文本?

有a、b、c三个文件夹,每个文件夹都有近千个.txt文本,每个文本1K左右大小。要求:1、从这三个文件夹中(顺序、随机均可)各取一个文件,组成一个新的文本文件。2、在合成新文件同时将原文件删除,以确保第二次循环中不重复。
请高手编写一个批处理啊,一次能完成的那种,我是看到代码头就大了那种菜鸟,已经手工合并了N多,实在吃不消了。。。。。
谢谢啊。。。。

[ 本帖最后由 sunflowerr_88 于 2011-1-27 03:05 编辑 ]
1

评分人数

    • tmplinshi: 感谢给帖子标题标注[已解决]字样PB + 2

回复 5楼 的帖子

经测试,四楼的代码执行成功!二楼的我加了个输出名,可还是不行啊,是不是我太笨了啊。。。。。

TOP

回复 3楼 的帖子

需要设置一个输出文件夹名
实际测试没发现问题
a\1.txt
b\1.txt
c\1.txt
已复制         1 个文件。
a\2.txt
b\2.txt
c\2.txt
已复制         1 个文件。
a\a.txt
b\a.txt
c\a.txt
已复制         1 个文件。
a\b.txt
b\b.txt
c\b.txt
已复制         1 个文件。
a\cue.txt
b\cue.txt
c\cue.txt
已复制         1 个文件。

[ 本帖最后由 hanyeguxing 于 2010-12-24 03:22 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

思路:
先输出所有文本的路径,输出时在路径前标上数字,每个文件夹都从 1 开始计数,最后用 sort 命令可得出这样的列表:
1:a\复件 4.txt
1:b\2.txt
1:c\2.txt

10:a\复件 复件 5.txt
10:b\list2.txt
10:c\复件 3.txt

11:a\复件 复件 1.txt
11:b\nircmd.txt
11:c\复件 复件 5.txt

...
  1. @echo off
  2. set "文件夹1=a"
  3. set "文件夹2=b"
  4. set "文件夹3=c"
  5. set "输出文件夹=#Output#"
  6. SetLocal EnableDelayedExpansion
  7. md "%输出文件夹%" 2>nul
  8. (for %%d in ("%文件夹1%" "%文件夹2%" "%文件夹3%") do (
  9.     set n=
  10.     for %%f in (%%d\*.txt) do (
  11.         set /a n += 1
  12.         echo !n!:%%f
  13.     )
  14. ))>"%temp%\.list"
  15. sort "%temp%\.list" > "%temp%\.list2"
  16. for /f "usebackq tokens=1,* delims=:" %%a in ("%temp%\.list2") do (
  17.     set files_%%a=!files_%%a!+"%%b"
  18.     set /a count_%%a += 1
  19.     if !count_%%a!==3 (
  20.         copy /b !files_%%a:~1! "%输出文件夹%\%%a.txt"
  21.         del /a /f !files_%%a:+= !
  22.         set count_%%a=
  23.         set files_%%a=
  24.     )
  25. )
  26. del "%temp%\.list" "%temp%\.list2"
  27. title 完成
  28. pause
复制代码

[ 本帖最后由 tmplinshi 于 2010-12-24 12:49 编辑 ]
1

评分人数

TOP

回复 2楼 的帖子

运行过上面的代码了,拒绝访问!我只有三个文件夹,文件夹名就是a,b,c,将上述代码中的
set a=a目录名
set b=b目录名
set c=c目录名
set d=d目录名(输出目录)
改成了以下
set a=a
set b=b
set c=c
还需要改什么吗?谢谢
另外,这个批处理文件我将其与这三个文件夹放在同一文件夹中,对不对?

TOP

回复 1楼 的帖子

ps:标题不符合版规
  1. @echo off&setlocal enabledelayedexpansion
  2. set a=a目录名
  3. set b=b目录名
  4. set c=c目录名
  5. set d=d目录名(输出目录)
  6. md "%d%\"
  7. for %%a in ("%a%\*.txt") do set/a a_+=1&set #!a_!=%%~na
  8. for %%a in ("%b%\*.txt") do set/a b_+=1&set @!b_!=%%~na
  9. for %%a in ("%c%\*.txt") do (
  10.         set/a c_+=1
  11.         if defined #!c_! if defined @!c_! for %%b in (!c_!) do (
  12.                 copy /b "%a%\!#%%b!%%~xa" + /b "%b%\!@%%b!%%~xa" + /b "%%a" "%d%\%%~nxa"
  13.                 del /a/q/f "%a%\!#%%b!%%~xa"
  14.                 del /a/q/f "%b%\!@%%b!%%~xa"
  15.                 del /a/q/f "%%a"
  16. ))
复制代码

[ 本帖最后由 hanyeguxing 于 2010-12-24 02:20 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表