本文目录导读:

方案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批处理:
- 修改
PASSWORD变量 - 确保安装了7-Zip
- 双击运行或使用命令提示符执行
注意事项
-
安装必要工具:
- ZIP:Python自带支持
- RAR:需要安装
unrar或winrar - 7z:需要安装
p7zip或7-Zip
-
密码安全:不要在公开脚本中硬编码密码
-
文件名编码:处理中文文件名时注意编码问题
-
大文件处理:对于大文件,考虑使用流式解压
选择适合您需求的方案,如果需要其他功能(如进度条、错误重试等),可以告诉我!