本文目录导读:

综合批量修改脚本(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编码支持
- 性能考虑: 大量文件处理可能需要较长时间
这个脚本支持多种常见文件格式,可以根据需要扩展支持更多文件类型。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播