实用脚本能批量修复吗?

wen 实用脚本 11

本文目录导读:

实用脚本能批量修复吗?

  1. 批量修复图片 (如:恢复损坏的JPG/PNG)
  2. 批量修复视频 (如:修复音画不同步、索引损坏)
  3. 批量修复 Office 文档 (Word/Excel/PowerPoint)
  4. 批量修复文件编码 (乱码修复)
  5. 批量修复系统文件 (Windows)
  6. 总结:如何选择?
  7. 重要提醒

具体要看你想用脚本批量修复什么类型的问题,不同的修复目标(如图片修复、视频修复、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

重要提醒

  1. 备份先行:在执行任何批量修改脚本之前,务必将源文件复制一份到安全目录,脚本可能存在 Bug 或修复失败导致数据丢失。
  2. 测试样本:先拿 2-3 个损坏的文件进行测试,确认脚本能正确修复,再全量运行。
  3. 不可逆修复:有些修复(如 Office 文档的重新打包)会丢失原始的编辑历史、宏或部分复杂格式。
  4. 严重物理损坏:如果文件是物理硬盘坏道导致的,脚本无法修复,需要用 CHKDSKddrescue 等底层工具。

答案是肯定的:实用脚本完全可以批量修复,但需要你针对具体的“坏”的类型,选择合适的工具和逻辑。 你可以告诉我具体想修复什么类型的文件,我可以为你生成更精确的脚本。

抱歉,评论功能暂时关闭!