如何在CMD中合并目录及子目录下的所有文件?
解决CMD中合并指定目录及所有子目录下TXT文件的问题
你用copy /b *.txt output.txt没生效是因为这个命令只作用于当前目录下的TXT文件,不会自动遍历所有嵌套的子目录。针对你的多层目录结构(test下包含多级子文件夹,每个文件夹都有TXT文件),可以用以下几种方法实现批量合并:
方法1:用CMD的for命令递归遍历
在test目录下打开CMD窗口,执行这条命令:
for /r %f in (*.txt) do type "%f" >> merged_all.txt
- 细节说明:
for /r:让命令递归遍历当前目录(也就是test)以及所有子目录%f:代表找到的每个TXT文件的完整路径(包含文件夹层级)type "%f":读取单个TXT文件的内容>> merged_all.txt:把读取到的内容追加到目标文件merged_all.txt里(如果这个文件不存在,系统会自动创建)
如果是写在批处理脚本(.bat文件)里使用,要把%f改成%%f,避免语法错误:
@echo off for /r %%f in (*.txt) do type "%%f" >> merged_all.txt echo 所有TXT文件合并完成! pause
方法2:用PowerShell命令(更简洁且编码友好)
如果你的系统支持PowerShell,在test目录下打开PowerShell窗口,执行这条命令会更省心:
Get-ChildItem -Recurse -Filter *.txt | Get-Content | Out-File merged_all.txt -Encoding utf8
- 细节说明:
Get-ChildItem -Recurse -Filter *.txt:递归找出所有TXT文件Get-Content:读取每个文件的内容Out-File merged_all.txt -Encoding utf8:把所有内容写入目标文件,同时指定UTF-8编码,能避免大部分乱码问题
额外注意事项
- 如果
merged_all.txt已经存在,>>(CMD)或Out-File(PowerShell)会在原有内容后面追加新内容;如果想覆盖原有文件,CMD里用>替代>>,PowerShell里加上-Force参数 - 若不同TXT文件使用了不同编码,合并后可能出现乱码,建议先统一文件编码再合并,或者在PowerShell命令中指定对应编码(比如
-Encoding gbk)
内容的提问来源于stack exchange,提问作者Andrew S.
相关产品推荐
相关产品推荐

