如何写一个脚本批量解压加密包

wen 实用脚本 1

本文目录导读:

如何写一个脚本批量解压加密包

  1. 方案1:使用Python脚本(推荐,功能最强大)
  2. 方案2:简易的Bash脚本(Linux/macOS)
  3. 方案3:Windows批处理脚本
  4. 方案4:递增密码字典脚本
  5. 使用方法
  6. 注意事项

方案1:使用Python脚本(推荐,功能最强大)

#!/usr/bin/env python3
"""
批量解压加密压缩包脚本
支持:ZIP、RAR、7z格式
"""
import os
import zipfile
import subprocess
import argparse
from pathlib import Path
class BatchExtractor:
    def __init__(self, password, input_dir=".", output_dir="extracted"):
        self.password = password.encode() if password else None
        self.input_dir = Path(input_dir)
        self.output_dir = Path(output_dir)
        self.success_count = 0
        self.fail_count = 0
    def extract_zip(self, zip_path):
        """解压ZIP文件"""
        try:
            with zipfile.ZipFile(zip_path, 'r') as zf:
                # 创建输出目录
                extract_path = self.output_dir / zip_path.stem
                extract_path.mkdir(parents=True, exist_ok=True)
                # 尝试使用密码解压
                zf.extractall(path=extract_path, pwd=self.password)
                print(f"✅ 成功解压: {zip_path.name}")
                self.success_count += 1
                return True
        except Exception as e:
            print(f"❌ 解压失败: {zip_path.name} - {str(e)}")
            self.fail_count += 1
            return False
    def extract_rar(self, rar_path):
        """解压RAR文件(需要安装unrar)"""
        try:
            extract_path = self.output_dir / rar_path.stem
            extract_path.mkdir(parents=True, exist_ok=True)
            cmd = ['unrar', 'x']
            if self.password:
                cmd.extend(['-p' + self.password.decode()])
            cmd.extend([str(rar_path), str(extract_path) + '/'])
            result = subprocess.run(cmd, capture_output=True, text=True)
            if result.returncode == 0:
                print(f"✅ 成功解压: {rar_path.name}")
                self.success_count += 1
            else:
                print(f"❌ 解压失败: {rar_path.name}")
                self.fail_count += 1
        except Exception as e:
            print(f"❌ 解压失败: {rar_path.name} - {str(e)}")
            self.fail_count += 1
    def extract_7z(self, seven_z_path):
        """解压7z文件(需要安装7z)"""
        try:
            extract_path = self.output_dir / seven_z_path.stem
            extract_path.mkdir(parents=True, exist_ok=True)
            cmd = ['7z', 'x']
            if self.password:
                cmd.extend(['-p' + self.password.decode()])
            cmd.extend(['-o' + str(extract_path), str(seven_z_path)])
            result = subprocess.run(cmd, capture_output=True, text=True)
            if result.returncode == 0:
                print(f"✅ 成功解压: {seven_z_path.name}")
                self.success_count += 1
            else:
                print(f"❌ 解压失败: {seven_z_path.name}")
                self.fail_count += 1
        except Exception as e:
            print(f"❌ 解压失败: {seven_z_path.name} - {str(e)}")
            self.fail_count += 1
    def run(self):
        """执行批量解压"""
        # 查找所有压缩文件
        extensions = ['.zip', '.rar', '.7z', '.tar.gz', '.tar']
        files_to_extract = []
        for ext in extensions:
            files_to_extract.extend(self.input_dir.glob(f'*{ext}'))
        if not files_to_extract:
            print(f"在 {self.input_dir} 目录下没有找到压缩文件")
            return
        print(f"找到 {len(files_to_extract)} 个压缩文件")
        print(f"开始批量解压...\n")
        # 创建输出目录
        self.output_dir.mkdir(parents=True, exist_ok=True)
        # 遍历并解压
        for file_path in files_to_extract:
            suffix = file_path.suffix.lower()
            if suffix == '.zip':
                self.extract_zip(file_path)
            elif suffix == '.rar':
                self.extract_rar(file_path)
            elif suffix in ['.7z', '.tar.gz', '.tar']:
                self.extract_7z(file_path)
        # 打印统计信息
        print(f"\n📊 解压完成统计:")
        print(f"✅ 成功: {self.success_count}")
        print(f"❌ 失败: {self.fail_count}")
        print(f"📁 输出目录: {self.output_dir}")
def main():
    parser = argparse.ArgumentParser(description='批量解压加密压缩包')
    parser.add_argument('-p', '--password', required=True, help='解压密码')
    parser.add_argument('-i', '--input', default='.', help='输入目录(默认当前目录)')
    parser.add_argument('-o', '--output', default='extracted', help='输出目录(默认extracted)')
    args = parser.parse_args()
    extractor = BatchExtractor(
        password=args.password,
        input_dir=args.input,
        output_dir=args.output
    )
    extractor.run()
if __name__ == '__main__':
    main()

方案2:简易的Bash脚本(Linux/macOS)

#!/bin/bash
# 批量解压加密压缩包脚本
# 配置
PASSWORD="your_password_here"
INPUT_DIR="."
OUTPUT_DIR="extracted"
# 创建输出目录
mkdir -p "$OUTPUT_DIR"
echo "🔍 扫描压缩文件..."
success=0
failed=0
# 解压所有ZIP文件
for file in "$INPUT_DIR"/*.zip; do
    if [ -f "$file" ]; then
        filename=$(basename "$file" .zip)
        echo "📦 正在解压: $filename"
        if 7z x "$file" -p"$PASSWORD" -o"$OUTPUT_DIR/$filename" -y > /dev/null 2>&1; then
            echo "✅ 成功: $filename"
            ((success++))
        else
            echo "❌ 失败: $filename"
            ((failed++))
        fi
    fi
done
# 解压所有RAR文件(需要安装unrar)
for file in "$INPUT_DIR"/*.rar; do
    if [ -f "$file" ]; then
        filename=$(basename "$file" .rar)
        echo "📦 正在解压: $filename"
        mkdir -p "$OUTPUT_DIR/$filename"
        if unrar x -p"$PASSWORD" "$file" "$OUTPUT_DIR/$filename/" > /dev/null 2>&1; then
            echo "✅ 成功: $filename"
            ((success++))
        else
            echo "❌ 失败: $filename"
            ((failed++))
        fi
    fi
done
# 打印统计
echo ""
echo "📊 统计结果:"
echo "✅ 成功: $success"
echo "❌ 失败: $failed"
echo "📁 输出目录: $OUTPUT_DIR"

方案3:Windows批处理脚本

@echo off
chcp 65001 >nul
REM 批量解压加密压缩包(Windows)
REM 需要安装 7-Zip
set PASSWORD=your_password_here
set INPUT_DIR=.
set OUTPUT_DIR=extracted
echo 批量解压加密压缩包...
echo 密码: %PASSWORD%
echo.
mkdir "%OUTPUT_DIR%" 2>nul
set success=0
set failed=0
REM 解压所有ZIP文件
for %%f in ("%INPUT_DIR%\*.zip") do (
    echo 正在解压: %%~nf
    "C:\Program Files\7-Zip\7z.exe" x "%%f" -p%PASSWORD% -o"%OUTPUT_DIR%\%%~nf" -y >nul 2>&1
    if !errorlevel! equ 0 (
        echo ✅ 成功: %%~nf
        set /a success+=1
    ) else (
        echo ❌ 失败: %%~nf
        set /a failed+=1
    )
)
echo.
echo 📊 统计结果:
echo ✅ 成功: %success%
echo ❌ 失败: %failed%
echo 📁 输出目录: %OUTPUT_DIR%
pause

方案4:递增密码字典脚本

#!/usr/bin/env python3
"""
使用密码字典尝试解压加密包
"""
import os
import zipfile
import argparse
from pathlib import Path
def try_passwords(zip_path, password_file, output_dir="extracted"):
    """尝试多个密码"""
    zip_path = Path(zip_path)
    with open(password_file, 'r', encoding='utf-8') as f:
        passwords = [line.strip() for line in f if line.strip()]
    print(f"尝试 {len(passwords)} 个密码...")
    for password in passwords:
        try:
            with zipfile.ZipFile(zip_path, 'r') as zf:
                extract_path = Path(output_dir) / zip_path.stem
                extract_path.mkdir(parents=True, exist_ok=True)
                zf.extractall(path=extract_path, pwd=password.encode())
                print(f"✅ 成功!密码: {password}")
                return True
        except:
            continue
    print(f"❌ 未找到正确密码")
    return False
if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='使用密码字典批量解压')
    parser.add_argument('-i', '--input', required=True, help='压缩文件或目录')
    parser.add_argument('-p', '--passwords', required=True, help='密码字典文件')
    parser.add_argument('-o', '--output', default='extracted', help='输出目录')
    args = parser.parse_args()
    input_path = Path(args.input)
    if input_path.is_file():
        try_passwords(input_path, args.passwords, args.output)
    else:
        for ext in ['*.zip', '*.rar', '*.7z']:
            for zip_file in input_path.glob(ext):
                print(f"\n尝试: {zip_file.name}")
                try_passwords(zip_file, args.passwords, args.output)

使用方法

Python脚本:

# 安装依赖
pip install pyunpack patool
# 基本使用
python batch_extract.py -p "your_password"
# 指定目录
python batch_extract.py -p "your_password" -i "./压缩包" -o "./解压文件"
# 使用密码字典
python batch_extract_dict.py -i "./压缩包" -p "passwords.txt" -o "./解压文件"

Bash脚本:

# 赋予执行权限
chmod +x batch_extract.sh
# 修改密码后运行
./batch_extract.sh

Windows批处理:

  1. 修改 PASSWORD 变量
  2. 确保安装了7-Zip
  3. 双击运行或使用命令提示符执行

注意事项

  1. 安装必要工具

    • ZIP:Python自带支持
    • RAR:需要安装 unrarwinrar
    • 7z:需要安装 p7zip7-Zip
  2. 密码安全:不要在公开脚本中硬编码密码

  3. 文件名编码:处理中文文件名时注意编码问题

  4. 大文件处理:对于大文件,考虑使用流式解压

选择适合您需求的方案,如果需要其他功能(如进度条、错误重试等),可以告诉我!

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