本文目录导读:

Python 实现(最灵活)
#!/usr/bin/env python3
import os
import glob
def merge_text_files(input_files, output_file, separator="\n"):
"""合并多个文本文件"""
with open(output_file, 'w', encoding='utf-8') as outfile:
for i, file_path in enumerate(input_files):
# 添加文件分隔标志(可选)
if i > 0:
outfile.write(separator)
# 写入文件内容
with open(file_path, 'r', encoding='utf-8') as infile:
outfile.write(infile.read())
print(f"成功合并 {len(input_files)} 个文件到 {output_file}")
# 使用示例
if __name__ == "__main__":
# 方法1:指定文件列表
files = ["file1.txt", "file2.txt", "file3.txt"]
merge_text_files(files, "merged.txt")
# 方法2:匹配通配符
import glob
log_files = glob.glob("logs/*.log")
merge_text_files(log_files, "all_logs.txt")
批处理脚本 (Windows)
@echo off
setlocal enabledelayedexpansion
:: 合并所有txt文件到一个文件
set output_file=merged.txt
:: 清空或创建输出文件
type nul > %output_file%
:: 遍历并合并文件
for %%f in (*.txt) do (
if not "%%f"=="%output_file%" (
echo 合并文件: %%f
type "%%f" >> %output_file%
echo. >> %output_file% :: 添加换行
)
)
echo 文件合并完成!
Bash 脚本 (Linux/Mac)
#!/bin/bash
# 合并多个文件
output_file="merged.txt"
# 清空输出文件
> "$output_file"
# 合并所有txt文件(排除输出文件自身)
for file in *.txt; do
if [ "$file" != "$output_file" ]; then
echo "合并文件: $file"
cat "$file" >> "$output_file"
echo "" >> "$output_file" # 添加换行
fi
done
echo "文件合并完成!"
Node.js 实现
const fs = require('fs');
const path = require('path');
async function mergeFiles(inputFiles, outputFile) {
const writeStream = fs.createWriteStream(outputFile);
for (const filePath of inputFiles) {
const readStream = fs.createReadStream(filePath);
await new Promise((resolve, reject) => {
readStream.pipe(writeStream, { end: false });
readStream.on('end', () => {
writeStream.write('\n'); // 添加分隔
resolve();
});
readStream.on('error', reject);
});
}
writeStream.end();
console.log(`成功合并 ${inputFiles.length} 个文件`);
}
// 使用示例
const files = ['file1.txt', 'file2.txt', 'file3.txt'];
const pattern = require('glob');
pattern('logs/*.log', (err, files) => {
if (!err) {
mergeFiles(files, 'merged.log');
}
});
PowerShell 脚本
# 合并所有txt文件
$outputFile = "merged.txt"
$files = Get-ChildItem -Path . -Filter "*.txt" | Where-Object { $_.Name -ne $outputFile }
# 清空输出文件
Clear-Content -Path $outputFile -Force
foreach ($file in $files) {
Write-Host "合并文件: $($file.Name)"
Get-Content $file.FullName | Add-Content $outputFile
Add-Content $outputFile "" # 添加空行分隔
}
Write-Host "文件合并完成!"
高级功能版本(Python)
import os
import glob
from datetime import datetime
class FileMerger:
def __init__(self):
self.options = {
'add_filename': True, # 添加文件名标记
'add_timestamp': False, # 添加时间戳
'separator': '\n---\n', # 文件分隔符
'encoding': 'utf-8'
}
def merge(self, input_pattern, output_file, recursive=False):
"""高级文件合并功能"""
# 获取文件列表
files = glob.glob(input_pattern, recursive=recursive)
files.sort() # 排序
with open(output_file, 'w', encoding=self.options['encoding']) as outfile:
for i, file_path in enumerate(files):
if i > 0:
outfile.write(self.options['separator'])
# 添加文件信息
if self.options.get('add_filename'):
filename = os.path.basename(file_path)
outfile.write(f"\n# 文件: {filename}\n")
if self.options.get('add_timestamp'):
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
outfile.write(f"# 合并时间: {timestamp}\n\n")
# 写入文件内容
with open(file_path, 'r', encoding=self.options['encoding']) as infile:
outfile.write(infile.read())
return len(files)
# 使用示例
merger = FileMerger()
merger.options['add_filename'] = True
merger.options['separator'] = '\n\n# === 下一个文件 ===\n\n'
count = merger.merge("logs/*.log", "merged_logs.txt")
print(f"成功合并 {count} 个文件")
注意事项:
- 编码问题:处理中文文件时注意编码(UTF-8/GBK)
- 大文件处理:大文件建议使用流式处理(如 Node.js 的流)
- 文件排序:合并前应考虑文件顺序
- 文件大小:监控输出文件大小,避免磁盘溢出
- 二进制文件:文本合并方法不适用于二进制文件
选择哪种脚本取决于你的操作系统和具体需求,Python 版本最为通用且功能最完整。