以递归方式批量合并txt文件

以递归方式批量合并txt文件

我有一个文件夹,里面有几个子文件夹,每个子文件夹包含 10k+ 个小 txt 文件。现在我需要将每个子文件夹中的所有文件合并为一个大 txt 文件,以便进一步处理。

如果我在每个文件夹中手动调用一个批处理,其中仅包含copy *.txt merge.txt /B所有内容,则可以正常工作。

但是,如果我可以从主程序中调用一个批处理文件,为每个子文件夹执行相同的任务,那么会更好、更简单。我试过了,for /r %%d in (.) do (copy *.txt merge.txt /B)但没有成功。错误消息是找不到 *.txt,这让我相信我不能只使用通配符,而是需要指定文件。但那些是随机生成的。

您能否帮助我合并这些文件?谢谢

答案1

假设您在 %userprofile%\desktop\Mytext 中有以下 txt 文件

在此处输入图片描述

你可以使用这样的方法:

@echo off
Rem put the root path to the txt files here:
set TxtPath=%userprofile%\desktop\MyText

if exist %userprofile%\desktop\merge.txt del %userprofile%\desktop\merge.txt

for /r %TxtPath% %%a in (*.txt) do more "%%a">> %userprofile%\desktop\merge.txt 
notepad.exe %userprofile%\desktop\merge.txt

您将在桌面上看到一个名为 merge.txt 的文件,其内容如下:

在此处输入图片描述

作为替代方案,此代码:

@echo off
Rem put the root path to the txt files here:
set TxtPath=%userprofile%\desktop\MyText

if exist %userprofile%\desktop\merge.txt del %userprofile%\desktop\merge.txt

for /r %TxtPath% %%a in (*.txt) do (
echo %%~nxa: >> %userprofile%\desktop\merge.txt
more "%%a">> %userprofile%\desktop\merge.txt 
echo. >> %userprofile%\desktop\merge.txt
)
notepad.exe %userprofile%\desktop\merge.txt

将生成以下 merge.txt 文件:

在此处输入图片描述

答案2

您可以使用where命令来执行此操作for循环复制文件/合并 txt 使用cmd/bat或命令行:


:: for command line ::
cd.>.\merge.txt & for /f tokens^=* %i in ('where /r "." "*.txt"')do copy /b /y .\merge.txt + "%~i" .\merge.txt

:: for cmd/bat file ::
@echo off 
cd.>.\merge.txt & for /f tokens^=* %%i in ('%__APPDIR__%where.exe /r "." "*.txt"')do copy /b /y .\merge.txt + "%%~i" .\merge.txt

或者不使用copy....

@(for /r %i in (*.txt)do type "%~i")>merge.txt

  • 但是你也可以尝试这样做PowerShell
Get-ChildItem -recurse -file *.txt | Get-Content | Set-Content merge.txt

:: or, using alias ::
gci -re -file *.txt | gc | sc merge.txt

答案3

我会让for /R环形解析文件模式而不是copy命令:

rem // Prepare an empty result file to merge into:
> "merge.txt" rem/
rem // Merge one matching file after another, excluding the merge target file itself:
for /R %%I in ("*.txt") do if /I not "%%~nxI"=="merge.txt" copy "merge.txt" + "%%~I" "merge.txt" /B

for /R当没有提供明确的根目录时,命令将扎根于当前工作目录。

相关内容