基于文件名分组合并文本文件的CMD批处理实现需求
按文件名前缀分组合并文本文件的CMD批处理方案
我专门写了这个CMD批处理脚本,完美匹配你的需求——自动识别文件名前缀(比如the blue one这类带空格的前缀),把同前缀的文件合并成前缀 all.txt格式的文件:
@echo off setlocal enabledelayedexpansion :: 遍历所有txt文件,提取前缀 for %%f in (*.txt) do ( set "filename=%%~nf" :: 去掉文件名末尾的数字和空格(比如"the blue one 1"变成"the blue one") set "prefix=!filename!" :loop if "!prefix:~-1!"==" " set "prefix=!prefix:~0,-1!" & goto loop if "!prefix:~-1!" geq "0" if "!prefix:~-1!" leq "9" set "prefix=!prefix:~0,-1!" & goto loop :: 避免合并目标文件本身(比如跳过xxx all.txt) if not "!prefix!"=="%%~nf" ( :: 合并到目标文件,/b用二进制模式避免文本EOF问题 copy /b "%%f"+"!prefix! all.txt" "!prefix! all.txt" >nul ) ) echo 合并完成! pause
脚本关键细节说明:
- 延迟变量扩展:
setlocal enabledelayedexpansion是处理带空格文件名的核心,确保循环里能动态修改和读取变量。 - 智能前缀提取:通过循环逐步去掉文件名末尾的数字和空格,不管后缀数字是1位还是多位,都能精准提取出前缀部分。
- 防自合并机制:判断前缀不等于原文件名,避免把已经生成的
xxx all.txt再次合并到自身里。 - 静默高效合并:
copy /b用二进制模式合并(避免文本文件的特殊EOF标记干扰),>nul隐藏复制过程的冗余输出,让脚本运行更清爽。
使用注意事项:
- 把脚本保存为
merge_files.bat,放到你的文本文件所在文件夹双击运行即可。 - 如果需要覆盖式合并(而不是追加),可以把合并行改成:
if not exist "!prefix! all.txt" copy /b "%%f" "!prefix! all.txt" else copy /b "!prefix! all.txt"+"%%f" "!prefix! all.txt" - 脚本完全兼容带空格的文件名,和你给出的
the end 1.txt这类命名格式完美适配。
内容的提问来源于stack exchange,提问作者oneonezero




