Board logo

标题: [文本处理] [已解决]批处理怎样把多个文件夹中相同文本名称合并后生成在新文件夹中 [打印本页]

作者: PCL0769    时间: 2021-9-6 11:41     标题: [已解决]批处理怎样把多个文件夹中相同文本名称合并后生成在新文件夹中

202101文件夹内有以下文本
1.txt
2.txt
3.txt
4.txt
......
有N个文本
202102文件夹内有以下文本
1.txt
2.txt
3.txt
4.txt
......
有N个文本
202103文件夹内有以下文本
1.txt
2.txt
3.txt
4.txt
......
有N个文本
202104文件夹内有以下文本
1.txt
2.txt
3.txt
4.txt
......
有N个文本

202105文件夹内有以下文本
........
有N个文件夹
请帮忙写一个将以上N个文件夹中的N个同名的文本合并然后生成一个新的文件夹,文件夹中同样生成合并后同名的文本
合并文件夹内有以下文本
1.txt
2.txt
3.txt
4.txt
......
有N个文本

请老师抽空帮写一个批处理,谢谢!
作者: qixiaobin0715    时间: 2021-9-6 13:53

回复 1# PCL0769
假设每个子文件夹中的文件名一样多,文件名都一样。
批处理文件放在与子文件夹平行的目录中。
  1. @echo off
  2. set "Folder=D:\abc"
  3. md "%Folder%"
  4. for %%i in (202101\*.txt) do (
  5.     (for /d %%a in (*) do (
  6.         type "%%a\%%~nxi"
  7.     ))>"%Folder%\%%~nxi"
  8. )
  9. pause
复制代码

作者: PCL0769    时间: 2021-9-6 14:04

本帖最后由 PCL0769 于 2021-9-6 14:05 编辑
回复  PCL0769
假设每个子文件夹中的文件名一样多,文件名都一样。
批处理文件放在与子文件夹平行的目录 ...
qixiaobin0715 发表于 2021-9-6 13:53

老师好!谢谢!
出现下面提示:

系统找不到指定的文件。
系统找不到指定的文件。
系统找不到指定的文件。
系统找不到指定的文件。
系统找不到指定的文件。
系统找不到指定的文件。
系统找不到指定的文件。
系统找不到指定的文件。
系统找不到指定的文件。
系统找不到指定的文件。
系统找不到指定的文件。
系统找不到指定的文件。
请按任意键继续. . .

传不图片及附件
D:\数据\周转
文件夹在周转中,里面有202101  202102 202103.....文件夹,然后每个文件夹中有30多个记事本,1.TXT  2.TXT  3.TXT.......
作者: qixiaobin0715    时间: 2021-9-6 14:15

本帖最后由 qixiaobin0715 于 2021-9-6 14:17 编辑

回复 3# PCL0769
D盘中abc文件夹中有无合并文件?
不要先顾着评分,解决问题才是关键。
作者: PCL0769    时间: 2021-9-6 14:17

D:\数据\周转
文件夹在周转中,里面有202101  202102 202103.....文件夹,然后每个文件夹中有30多个记事本,1.TXT  2.TXT  3.TXT.......

将同名记事本合并后在周转文件夹中生成一个合并文件夹,合并文件夹中还是按原记事本名1.TXT  2.TXT  3.TXT.......保存
作者: PCL0769    时间: 2021-9-6 14:21

D:\abc
有文件夹,里面有个%~nxa  0KB 没看到后缀是什么
作者: qixiaobin0715    时间: 2021-9-6 14:26

回复 6# PCL0769
应当是复制代码时出现了问题,重新复制代码再试试
作者: Batcher    时间: 2021-9-6 14:28

回复 1# PCL0769
  1. @echo off
  2. set "SrcFolder=D:\数据\周转"
  3. set "DstFolder=D:\数据\合并"
  4. if not exist "%SrcFolder%" (
  5.     goto :eof
  6. )
  7. if not exist "%DstFolder%" (
  8.     md "%DstFolder%"
  9. )
  10. for /f "delims=" %%i in ('dir /b /ad "%SrcFolder%"') do (
  11.     for /f "delims=" %%j in ('dir /b /a-d "%SrcFolder%\%%i\*.txt" 2^>nul') do (
  12.         >"%DstFolder%\%%j" type "%SrcFolder%\%%i\%%j"
  13.         for /f "delims=" %%k in ('dir /b /ad "%SrcFolder%" ^| findstr /v /b /e "%%i"') do (
  14.             if exist "%SrcFolder%\%%k\%%j" (
  15.                 >>"%DstFolder%\%%j" type "%SrcFolder%\%%k\%%j"
  16.             )
  17.         )
  18.         >>"%DstFolder%\%%j" echo,
  19.     )
  20.     goto :eof
  21. )
复制代码

作者: qixiaobin0715    时间: 2021-9-6 14:28

代码要放在D:\数据\周转 下
作者: PCL0769    时间: 2021-9-6 14:32

本帖最后由 PCL0769 于 2021-9-6 14:52 编辑

谢谢!
可能是自制时出错,重新复制后运行。正在生成中......
作者: PCL0769    时间: 2021-9-6 14:41

合并成功,谢谢老师的帮助!
作者: PCL0769    时间: 2021-9-6 15:12

回复 8# Batcher
@echo off
set "SrcFolder=D:\数据\周转"
set "DstFolder=D:\数据\周转\合并"

谢谢老师出手帮助!也成功合并。
作者: PCL0769    时间: 2021-9-6 15:41

本帖最后由 PCL0769 于 2021-9-6 15:43 编辑

回复 8# Batcher
合并后的1.txt  38.0 MB (39,897,024 字节)  里面有重复,等于是一个数据生成了两次在合并记事本里面

用楼上老师的(abc)合并后1.txt  19.0 MB (19,950,522 字节)
作者: PCL0769    时间: 2021-9-6 15:46

知道是什么原因了,新生成的合并文件夹不能放在同一个目录
作者: newswan    时间: 2021-9-6 20:50

本帖最后由 newswan 于 2021-9-6 20:58 编辑

如果放源目录下,要排除合并的文件,避免被读取
  1. set sour=aaa
  2. set dest=bbb
  3. for /f  "usebackq tokens=* delims=" %%a in (`dir /s /b "%sour%\*.txt"`) do (
  4.     type "%%~fa" >> "%dest%\%%~na.txt"
  5. )
复制代码

作者: newswan    时间: 2021-9-6 22:02

或者,合并的文件,顺序在前
  1. D:.
  2. │   1.bat
  3. │   1.txt
  4. │   2.txt
  5. │   3.txt
  6. ├───11
  7. │       1.txt
  8. │       2.txt
  9. │       3.txt
  10. ├───22
  11. │       1.txt
  12. │       2.txt
  13. │       3.txt
  14. └───33
  15.         1.txt
  16.         2.txt
  17.         3.txt
复制代码

作者: qixiaobin0715    时间: 2021-9-9 09:52

回复 14# PCL0769
可以在同一个目录,需要修改代码,加一个判断语句,或者先过滤掉合并文件夹。只不过这样代码显得不清爽,效率上也会牺牲一些。
作者: qixiaobin0715    时间: 2021-9-9 10:10

代码放在D:\数据\周转 目录下:
  1. @echo off
  2. md "合并"
  3. for %%i in (202101\*.txt) do (
  4.     (for /f "delims=" %%a in ('dir /b /ad^|findstr /v/r "合并"') do (
  5.         type "%%a\%%~nxi"
  6.     ))>"合并\%%~nxi"
  7. )
  8. pause
复制代码

作者: PCL0769    时间: 2021-9-11 13:23

回复 15# newswan

谢谢老师!
作者: PCL0769    时间: 2021-10-4 06:56

本帖最后由 PCL0769 于 2021-10-4 09:12 编辑

回复 15# newswan
老师你好!
恳请老师的帮助,以下是新贴,谢谢!
http://www.bathome.net/thread-60242-1-1.html
作者: PCL0769    时间: 2021-10-4 06:58

回复 2# qixiaobin0715
老师好,还请帮忙增加一个去重复和去特定行的语句,谢谢!
SZ300951        20210226        4727036
SZ300999        20210226        201125534
SZ138811-QQ84299        20210226        0此行需要删除,20210226是按日期变化的一个变量
作者: PCL0769    时间: 2021-10-4 06:58

本帖最后由 PCL0769 于 2021-10-4 09:12 编辑

回复 8# Batcher
老师你好!
恳请老师的帮助,以下是新贴,谢谢!
http://www.bathome.net/thread-60242-1-1.html
作者: qixiaobin0715    时间: 2021-10-4 07:17

不同的需求求助应当开个新帖,这样才能让更多的人看到,解决问题的概率更高些。并且你语焉不详,应当更详细些。
如何才叫重复?特定行是固定的还是有什么特征?
作者: PCL0769    时间: 2021-10-4 07:26

回复 23# qixiaobin0715
好的,老师   现在就重新开个贴
作者: qixiaobin0715    时间: 2021-10-4 07:28

你是指合并后的文件吗?
作者: PCL0769    时间: 2021-10-4 08:16

回复 25# qixiaobin0715
老师你好!
恳请老师的帮助,以下是新贴,谢谢!
http://www.bathome.net/thread-60242-1-1.html




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