本文目录导读:

- 批量修复图片 (如:恢复损坏的JPG/PNG)
- 批量修复视频 (如:修复音画不同步、索引损坏)
- 批量修复 Office 文档 (Word/Excel/PowerPoint)
- 批量修复文件编码 (乱码修复)
- 批量修复系统文件 (Windows)
- 总结:如何选择?
- 重要提醒
具体要看你想用脚本批量修复什么类型的问题,不同的修复目标(如图片修复、视频修复、PDF修复、文件编码修复、系统文件修复等)需要不同的脚本。
下面我为你列举几种常见的批量修复场景及其对应的实用脚本思路,你可以参考一下。
批量修复图片 (如:恢复损坏的JPG/PNG)
场景:部分图片文件头损坏、缩略图不显示、后缀名错误。
实用脚本思路 (Python):
- 核心逻辑:遍历文件夹,尝试用
PIL(Pillow) 库打开并重新保存图片,对于轻微损坏的图片,这往往能重建文件结构。
# 示例:批量尝试修复并重写图片
from PIL import Image
import os
def batch_fix_images(input_folder, output_folder):
os.makedirs(output_folder, exist_ok=True)
for filename in os.listdir(input_folder):
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')):
filepath = os.path.join(input_folder, filename)
try:
img = Image.open(filepath)
# 强制加载图片数据,如果损坏会在这里报错
img.verify()
# 重新打开并保存(修复部分元数据问题)
img = Image.open(filepath)
output_path = os.path.join(output_folder, filename)
img.save(output_path)
print(f"✅ 修复成功: {filename}")
except Exception as e:
print(f"❌ 无法修复 (严重损坏): {filename}, 原因: {e}")
# 使用示例 (请修改路径)
batch_fix_images("./损坏图片目录", "./修复后图片目录")
批量修复视频 (如:修复音画不同步、索引损坏)
场景:下载的视频无法拖动进度条、播放花屏。
实用脚本思路 (FFmpeg + Bash/Shell):
- 核心逻辑:使用功能强大的
ffmpeg,通过“复制流(-c copy)”的方式快速重新封装,或使用“重编码(-c:v libx264)”来修复更深层的问题。
#!/bin/bash
# 批量修复 .mp4 文件 (修复moov原子位置)
for file in *.mp4; do
echo "正在修复: $file"
# -c copy 是快速修复,不重新编码,保留原质量
# 将损坏的原文件重命名,把修复后的命名为原文件名
mv "$file" "old_$file"
ffmpeg -i "old_$file" -c copy -movflags +faststart "$file"
rm "old_$file" # 修复成功后删除原文件
done
echo "批量修复完成!"
提示:请确保已安装 FFmpeg,如果文件损坏严重,可能需要去掉 -c copy 进行重编码,但会损失画质和花费更长时间。
批量修复 Office 文档 (Word/Excel/PowerPoint)
场景:Word/Excel 文件打开报错,但内部数据可能还在。
实用脚本思路 (Python + zipfile):
- 核心逻辑:
.docx/.xlsx文件本质上是 ZIP 压缩包,很多损坏只是 ZIP 结构受损,尝试将文件解压后重新打包,可以修复结构问题。
# 示例:通过解压并重新打包来修复Office文档
import zipfile
import os
import shutil
def fix_office_file(filepath, output_path):
temp_dir = filepath + "_temp"
try:
# 1. 解压
with zipfile.ZipFile(filepath, 'r') as z:
z.extractall(temp_dir)
# 2. 重新打包
shutil.make_archive(output_path.replace('.docx', ''), 'zip', temp_dir)
os.rename(output_path.replace('.docx', '') + '.zip', output_path)
print(f"✅ 修复成功: {os.path.basename(filepath)}")
return True
except Exception as e:
print(f"❌ 修复失败: {os.path.basename(filepath)}, 原因: {e}")
return False
finally:
# 清理临时目录
shutil.rmtree(temp_dir, ignore_errors=True)
# 批量处理 (修改路径)
folder = "./损坏文档"
for fname in os.listdir(folder):
if fname.endswith('.docx'):
fix_office_file(os.path.join(folder, fname), os.path.join(folder, "fixed_" + fname))
批量修复文件编码 (乱码修复)
场景:打开 .txt / .csv / .srt 文件全是乱码。
实用脚本思路 (Python):
- 核心逻辑:用错误的编码(如
gbk)读取,然后重新用正确的编码(如utf-8)写出。
def fix_encoding(filepath, output_path, src_encoding='gbk', dest_encoding='utf-8'):
try:
with open(filepath, 'r', encoding=src_encoding, errors='replace') as f:
content = f.read()
with open(output_path, 'w', encoding=dest_encoding) as f:
f.write(content)
print(f"✅ 编码修复: {filepath} -> {output_path}")
except Exception as e:
print(f"❌ 失败: {e}")
# 批量使用 (需修改路径)
import glob
for txt_file in glob.glob("./*.txt"):
fix_encoding(txt_file, txt_file.replace('.txt', '_fixed.txt'))
批量修复系统文件 (Windows)
场景:系统文件损坏,需要逐台电脑修复。
脚本 (批处理 .bat):
@echo off echo 正在运行系统文件检查器并自动修复... sfc /scannow echo 正在运行DISM修复映像... DISM /Online /Cleanup-Image /RestoreHealth echo 修复完成!建议重启。 pause
注意:此脚本运行在管理员模式下,会修复一台电脑的系统文件,不能直接用于远程批量修复多台电脑(需要配合其他工具)。
如何选择?
| 修复目标 | 核心工具 | 成功率 | 速度 | 复杂程度 |
|---|---|---|---|---|
| 图片 | PIL/Pillow | 中高 | 快 | 低 |
| 视频 | FFmpeg | 高 (复制流) / 中 (重编码) | 快 (复制流) / 慢 (重编码) | 中 |
| Office文档 | zipfile | 中 | 快 | 低 |
| 编码 | Python IO | 高 | 快 | 低 |
| 系统文件 | sfc/DISM | 高 | 中 | 低 |
重要提醒
- 备份先行:在执行任何批量修改脚本之前,务必将源文件复制一份到安全目录,脚本可能存在 Bug 或修复失败导致数据丢失。
- 测试样本:先拿 2-3 个损坏的文件进行测试,确认脚本能正确修复,再全量运行。
- 不可逆修复:有些修复(如 Office 文档的重新打包)会丢失原始的编辑历史、宏或部分复杂格式。
- 严重物理损坏:如果文件是物理硬盘坏道导致的,脚本无法修复,需要用
CHKDSK、ddrescue等底层工具。
答案是肯定的:实用脚本完全可以批量修复,但需要你针对具体的“坏”的类型,选择合适的工具和逻辑。 你可以告诉我具体想修复什么类型的文件,我可以为你生成更精确的脚本。