本文目录导读:

综合批量修改脚本(Python)
#!/usr/bin/env python3
"""
批量修改文件作者信息脚本
支持:Office文档(docx/xlsx/pptx)、PDF、图片(JPEG/PNG)
"""
import os
import sys
import argparse
from pathlib import Path
import subprocess
from datetime import datetime
class FileAuthorModifier:
def __init__(self, verbose=False):
self.verbose = verbose
def modify_office_doc(self, file_path, author, company=None):
"""修改Office文档作者信息"""
try:
from docx import Document
from openpyxl import load_workbook
from pptx import Presentation
ext = Path(file_path).suffix.lower()
if ext == '.docx':
doc = Document(file_path)
doc.core_properties.author = author
if company:
doc.core_properties.company = company
doc.save(file_path)
elif ext == '.xlsx':
wb = load_workbook(file_path)
wb.properties.creator = author
if company:
wb.properties.company = company
wb.save(file_path)
elif ext == '.pptx':
prs = Presentation(file_path)
prs.core_properties.author = author
if company:
prs.core_properties.company = company
prs.save(file_path)
return True
except Exception as e:
if self.verbose:
print(f"修改Office文档失败 {file_path}: {e}")
return False
def modify_pdf(self, file_path, author):
"""修改PDF作者信息"""
try:
from PyPDF2 import PdfReader, PdfWriter
reader = PdfReader(file_path)
writer = PdfWriter()
# 复制页面
for page in reader.pages:
writer.add_page(page)
# 修改元数据
metadata = reader.metadata
if metadata:
writer.add_metadata({
'/Author': author,
'/Creator': f'Modified by batch script {datetime.now()}'
})
# 保存
with open(file_path, 'wb') as f:
writer.write(f)
return True
except Exception as e:
if self.verbose:
print(f"修改PDF失败 {file_path}: {e}")
return False
def modify_image(self, file_path, author):
"""修改图片作者信息"""
try:
from PIL import Image
from PIL.PngImagePlugin import PngInfo
img = Image.open(file_path)
if file_path.lower().endswith('.png'):
# PNG格式
metadata = PngInfo()
metadata.add_text('Author', author)
metadata.add_text('Creator', f'Modified by batch script')
img.save(file_path, pnginfo=metadata)
elif file_path.lower().endswith(('.jpg', '.jpeg')):
# JPEG格式
exif = img.getexif()
exif[0x9C9B] = author # XPAuthor标签
img.save(file_path, exif=exif)
return True
except Exception as e:
if self.verbose:
print(f"修改图片失败 {file_path}: {e}")
return False
def modify_file(self, file_path, author, company=None):
"""根据文件类型修改作者信息"""
ext = Path(file_path).suffix.lower()
if ext in ['.docx', '.xlsx', '.pptx']:
return self.modify_office_doc(file_path, author, company)
elif ext == '.pdf':
return self.modify_pdf(file_path, author)
elif ext in ['.jpg', '.jpeg', '.png']:
return self.modify_image(file_path, author)
else:
if self.verbose:
print(f"不支持的文件类型: {file_path}")
return False
def batch_modify(self, directory, author, company=None, recursive=False):
"""批量修改目录下的文件"""
pattern = '**/*' if recursive else '*'
success_count = 0
fail_count = 0
for file_path in Path(directory).glob(pattern):
if file_path.is_file():
if self.modify_file(str(file_path), author, company):
success_count += 1
if self.verbose:
print(f"✓ 修改成功: {file_path}")
else:
fail_count += 1
return success_count, fail_count
def main():
parser = argparse.ArgumentParser(description='批量修改文件作者信息')
parser.add_argument('directory', help='要处理的目录路径')
parser.add_argument('author', help='新的作者名称')
parser.add_argument('--company', '-c', help='公司名称(仅Office文档)')
parser.add_argument('--recursive', '-r', action='store_true', help='递归处理子目录')
parser.add_argument('--verbose', '-v', action='store_true', help='显示详细信息')
args = parser.parse_args()
if not Path(args.directory).exists():
print(f"错误: 目录 '{args.directory}' 不存在")
sys.exit(1)
modifier = FileAuthorModifier(verbose=args.verbose)
print(f"开始处理目录: {args.directory}")
print(f"设置作者为: {args.author}")
if args.company:
print(f"设置公司为: {args.company}")
success, fail = modifier.batch_modify(
args.directory,
args.author,
args.company,
args.recursive
)
print(f"\n处理完成!")
print(f"成功: {success}")
print(f"失败: {fail}")
if __name__ == '__main__':
main()
安装依赖
# 安装必要的Python库 pip install python-docx openpyxl python-pptx PyPDF2 Pillow
使用方法
# 基本用法 python modify_author.py /path/to/files "新作者名" # 递归处理子目录 python modify_author.py /path/to/files "新作者名" -r # 指定公司名称(仅Office文档) python modify_author.py /path/to/files "新作者名" -c "公司名" # 显示详细信息 python modify_author.py /path/to/files "新作者名" -v
Linux/Unix Shell脚本版本
#!/bin/bash
# 批量修改文件作者信息 (Shell版本)
MODIFY_AUTHOR() {
local file="$1"
local author="$2"
case "${file,,}" in
*.docx|*.xlsx|*.pptx)
# Office文档 - 使用python命令
python3 -c "
from docx import Document
from openpyxl import load_workbook
from pptx import Presentation
import sys
file_path = '$file'
author = '$author'
if file_path.endswith('.docx'):
doc = Document(file_path)
doc.core_properties.author = author
doc.save(file_path)
elif file_path.endswith('.xlsx'):
wb = load_workbook(file_path)
wb.properties.creator = author
wb.save(file_path)
elif file_path.endswith('.pptx'):
prs = Presentation(file_path)
prs.core_properties.author = author
prs.save(file_path)
print(f'Modified: {file_path}')
" 2>/dev/null || echo "跳过: $file (可能需要安装Python库)"
;;
*.pdf)
# PDF文件
exiftool -overwrite_original -Author="$author" "$file" 2>/dev/null || \
pdfinfo "$file" > /dev/null 2>&1 && \
pdftk "$file" output temp.pdf allow AllFeatures && \
mv temp.pdf "$file"
;;
*.jpg|*.jpeg|*.png)
# 图片文件
exiftool -overwrite_original -Artist="$author" -Author="$author" "$file" 2>/dev/null || \
echo "需要安装exiftool"
;;
*)
echo "不支持的文件类型: $file"
;;
esac
}
# 主程序
DIRECTORY="${1:-.}"
AUTHOR="${2:-Unknown}"
echo "开始修改目录: $DIRECTORY"
echo "设置作者为: $AUTHOR"
find "$DIRECTORY" -type f \( -iname "*.docx" -o -iname "*.xlsx" -o -iname "*.pptx" -o -iname "*.pdf" -o -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | while read file; do
MODIFY_AUTHOR "$file" "$AUTHOR"
done
echo "完成!"
安装Shell版本依赖
# Ubuntu/Debian sudo apt-get install exiftool pdftk python3-docx python3-openpyxl python3-pptx # CentOS/RHEL sudo yum install exiftool pdftk python3-docx python3-openpyxl python3-pptx
注意事项
- 备份文件: 修改前建议备份重要文件
- 权限问题: 确保有文件写入权限
- 文件锁定: 确保文件未被其他程序占用
- 编码问题: 中文作者名可能需要UTF-8编码支持
- 性能考虑: 大量文件处理可能需要较长时间
这个脚本支持多种常见文件格式,可以根据需要扩展支持更多文件类型。