【问题标题】:Merge multiple txt in several subdirectories into 1 txt for each subdirectories in Windows将多个子目录中的多个txt合并为Windows中每个子目录的1个txt
【发布时间】:2022-01-13 18:52:57
【问题描述】:

操作系统:Windows 10

这里是示例目录结构。

D:\Fruits\Apple\ a.txt k.txt c.txt

D:\Fruits\Mango\ g.txt q.txt b.txt

我想像这样合并每个文件夹的txt文件。

D:\Fruits\Apple\ a.txt k.txt c.txt merge.txt (a+k+c)

D:\Fruits\Mango\ g.txt q.txt b.txt merge.txt (g+q+b)

@echo 关闭

for /r " D:\Fruits" %%a in (*.txt) 输入 "%%a" >>"merge.txt"

我尝试了这批,但结果不是我的预期。

D:\Fruits\merge.txt (a+k+c+g+q+b)

请帮助我如何继续执行任务。谢谢。

【问题讨论】:

  • 如果您不递归执行此操作,则不需要 for 循环,只需 Type "D:\Fruits\*.txt" 1>"merge.txt" 即可。您也可以使用Copy 命令Copy "D:\Fruits\*.txt" "merge.txt" 来完成。请打开命令提示符窗口,输入copy /? 以阅读其使用信息,同样type /? 以了解其他命令的工作原理。如果您想递归地执行此操作,那么您将需要 for 循环序列,但是,我仍然建议您使用 For /F 循环,(for /?)。跨度>
  • 您还需要注意,如果您希望合并的文本文件结果位于其各自源文件所在的每个子目录中,那么您可能需要重新考虑命名结果文件具有相同的扩展名。如果您不这样做,它会尝试将自己包含在自己的结果中。

标签: windows batch-file cmd merge txt


【解决方案1】:

使用for /D遍历目录,然后单独处理每个目录,使用dir检索所有*.txt文件,findstr排除结果文件merge.txtfor /F进行迭代文件。要最终写入merge.txt,请使用output redirection >

for /D %%J in ("D:\Fruits\*") do (
    > "%%~J\merge.txt" (
        for /F "delims= eol=|" %%I in ('
            dir /B /A:-D-H-S /O:N "%%~J\*.txt" ^| findstr /V /I /C:"merge.txt"
        ') do (
            type "%%~J\%%I"
        )
    )
)

代替type写入结果文件,copy也可以使用:

for /D %%J in ("D:\Fruits\*") do (
    > "%%~J\merge.txt" rem/ // deplete the file in advance;
    for /F "delims= eol=|" %%I in ('
        dir /B /A:-D-H-S /O:N "%%~J\*.txt" ^| findstr /V /I /C:"merge.txt"
    ') do (
        copy /B "%%~J\merge.txt" + "%%~J\%%I" "%%~J\merge.txt"
    )
)

由于dir 命令的/O:N*.txt 文件按字母顺序合并。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 2014-02-24
    • 2010-12-06
    • 2020-05-01
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多