批量添加文件标题信息的脚本

wen 实用脚本 3

本文目录导读:

批量添加文件标题信息的脚本

  1. Python脚本 - 批量修改文件标题(支持多种文件类型)
  2. 批量修改文件元数据(Windows系统)
  3. 批量添加元数据到媒体文件
  4. 简单的Shell脚本(Linux/Mac)
  5. 使用说明:
  6. 注意事项:

Python脚本 - 批量修改文件标题(支持多种文件类型)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
批量添加/修改文件标题信息脚本
支持:PDF, Office文档, 文本文件等
"""
import os
import sys
from datetime import datetime
class FileTitleModifier:
    def __init__(self, directory):
        self.directory = directory
        self.supported_extensions = {
            '.txt', '.md', '.py', '.json', '.xml', '.html', '.css', '.js',
            '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx',
            '.pdf', '.jpg', '.png', '.mp3', '.mp4'
        }
    def add_title_to_files(self, title_prefix="", title_suffix="", overwrite=False):
        """批量添加标题信息到文件"""
        modified_count = 0
        for filename in os.listdir(self.directory):
            filepath = os.path.join(self.directory, filename)
            if not os.path.isfile(filepath):
                continue
            # 获取文件扩展名
            _, ext = os.path.splitext(filename)
            ext = ext.lower()
            if ext in self.supported_extensions:
                try:
                    # 新文件名格式
                    if overwrite:
                        new_filename = f"{title_prefix}{filename}{title_suffix}"
                    else:
                        # 添加时间戳避免冲突
                        timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
                        new_filename = f"{title_prefix}{filename.split('.')[0]}_{timestamp}{ext}"
                    new_filepath = os.path.join(self.directory, new_filename)
                    # 重命名文件
                    if filepath != new_filepath:  # 避免相同文件名报错
                        os.rename(filepath, new_filepath)
                        print(f"✓ 已修改: {filename} -> {new_filename}")
                        modified_count += 1
                except Exception as e:
                    print(f"✗ 修改失败 {filename}: {str(e)}")
        print(f"\n总计修改了 {modified_count} 个文件")
        return modified_count
def main():
    # 配置参数
    target_directory = "."  # 当前目录,可以修改为具体路径prefix = "【重要】"  # 标题前缀suffix = "_v1.0"    # 标题后缀
    overwrite = False         # 是否覆盖原文件名(True会覆盖,False会添加时间戳)
    # 创建修改器实例并执行
    modifier = FileTitleModifier(target_directory)
    modifier.add_title_to_files(
        title_prefix=title_prefix,
        title_suffix=title_suffix,
        overwrite=overwrite
    )
if __name__ == "__main__":
    main()

批量修改文件元数据(Windows系统)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
批量修改文件属性中的标题信息
适用于Windows系统的文件属性
"""
import os
import subprocess
from pathlib import Path
class FileMetadataModifier:
    def __init__(self, directory):
        self.directory = Path(directory)
    def set_file_title_windows(self, filepath, new_title):
        """使用PowerShell修改Windows文件属性中的标题"""
        command = f'''
        $shell = New-Object -ComObject Shell.Application
        $folder = $shell.Namespace("{filepath.parent}")
        $file = $folder.ParseName("{filepath.name}")
        $folder.GetDetailsOf($file, 0) | Out-Null  # 0是标题属性的索引
        # 修改标题属性(可能需要管理员权限)
        '''
        # 简化的PowerShell命令(实际可能需要更复杂的实现)
        ps_command = f'Set-ItemProperty -Path "{filepath}" -Name "Title" -Value "{new_title}"'
        try:
            result = subprocess.run(
                ['powershell', '-Command', ps_command],
                capture_output=True,
                text=True
            )
            return result.returncode == 0
        except Exception as e:
            print(f"执行失败: {e}")
            return False
    def batch_set_titles(self, title_mapping=None, prefix="", suffix=""):
        """批量设置文件标题"""
        if title_mapping is None:
            title_mapping = {}
        success_count = 0
        for filepath in self.directory.iterdir():
            if filepath.is_file():
                # 确定新标题
                if filepath.name in title_mapping:
                    new_title = title_mapping[filepath.name]
                else:
                    # 使用默认规则生成标题
                    filename = filepath.stem
                    new_title = f"{prefix}{filename}{suffix}"
                # 执行修改
                if self.set_file_title_windows(filepath, new_title):
                    print(f"✓ 已设置: {filepath.name} -> {new_title}")
                    success_count += 1
                else:
                    print(f"✗ 设置失败: {filepath.name}")
        return success_count
def main():
    # 配置
    target_dir = "C:\\Your\\Target\\Directory"
    # 自定义标题映射(可选)mapping = {
        "report.pdf": "2024年度报告",
        "presentation.pptx": "项目演示"
    }
    # 通用前缀后缀
    prefix = "文档_"
    suffix = "_最终版"
    modifier = FileMetadataModifier(target_dir)
    # 使用自定义映射 + 默认规则
    result = modifier.batch_set_titles(
        title_mapping=title_mapping,
        prefix=prefix,
        suffix=suffix
    )
    print(f"\n成功修改了 {result} 个文件的标题属性")
if __name__ == "__main__":
    main()

批量添加元数据到媒体文件

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
批量添加元数据到图片和音频文件
需要安装: pip install Pillow mutagen
"""
import os
from pathlib import Path
from PIL import Image
from PIL.PngImagePlugin import PngInfo
from mutagen.mp3 import MP3
from mutagen.id3 import ID3, TIT2, TPE1, TALB
from mutagen.flac import FLAC
from mutagen.mp4 import MP4
class MediaMetadataModifier:
    def __init__(self, directory):
        self.directory = Path(directory)
    def add_title_to_image(self, filepath, title, artist="", description=""):
        """为图片文件添加标题信息"""
        try:
            image = Image.open(filepath)
            # 根据图片格式处理
            if filepath.suffix.lower() == '.png':
                metadata = PngInfo()
                metadata.add_text("Title", title)
                if artist:
                    metadata.add_text("Artist", artist)
                if description:
                    metadata.add_text("Description", description)
                image.save(filepath, "PNG", pnginfo=metadata)
            elif filepath.suffix.lower() in ['.jpg', '.jpeg']:
                # JPEG使用EXIF
                exif_data = image.getexif()
                exif_data[0x010e] = title  # ImageDescription
                if artist:
                    exif_data[0x013b] = artist  # Artist
                image.save(filepath, "JPEG", exif=exif_data)
            else:
                # 其他格式使用通用方法
                image.info["Title"] = title
                image.save(filepath)
            return True
        except Exception as e:
            print(f"图片处理失败 {filepath.name}: {e}")
            return False
    def add_title_to_audio(self, filepath, title, artist="", album=""):
        """为音频文件添加标题信息"""
        try:
            ext = filepath.suffix.lower()
            if ext == '.mp3':
                audio = MP3(filepath, ID3=ID3)
                try:
                    audio.add_tags()
                except:
                    pass
                audio.tags.add(TIT2(encoding=3, text=title))
                if artist:
                    audio.tags.add(TPE1(encoding=3, text=artist))
                if album:
                    audio.tags.add(TALB(encoding=3, text=album))
                audio.save()
            elif ext == '.flac':
                audio = FLAC(filepath)
                audio['title'] = title
                if artist:
                    audio['artist'] = artist
                if album:
                    audio['album'] = album
                audio.save()
            elif ext == '.m4a':
                audio = MP4(filepath)
                audio['\xa9nam'] = title
                if artist:
                    audio['\xa9ART'] = artist
                if album:
                    audio['\xa9alb'] = album
                audio.save()
            return True
        except Exception as e:
            print(f"音频处理失败 {filepath.name}: {e}")
            return False
    def batch_process(self, media_type="all", title_strategy="filename"):
        """批量处理文件"""
        processed = 0
        for filepath in self.directory.iterdir():
            if not filepath.is_file():
                continue
            ext = filepath.suffix.lower()
            filename = filepath.stem
            # 决定标题
            if title_strategy == "filename":
                title = filename
            elif title_strategy == "timestamp":
                from datetime import datetime
                title = f"Media_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
            else:
                title = "Untitled"
            # 根据文件类型处理
            if media_type in ["all", "image"] and ext in ['.jpg', '.jpeg', '.png', '.gif', '.bmp']:
                if self.add_title_to_image(filepath, title):
                    print(f"✓ 图片标题已添加: {filename}")
                    processed += 1
            elif media_type in ["all", "audio"] and ext in ['.mp3', '.flac', '.m4a', '.wav']:
                if self.add_title_to_audio(filepath, title):
                    print(f"✓ 音频标题已添加: {filename}")
                    processed += 1
        return processed
def main():
    # 配置
    target_directory = "./media_files"
    # 创建处理器
    processor = MediaMetadataModifier(target_directory)
    # 处理所有媒体文件(media_type可选: "all", "image", "audio")
    result = processor.batch_process(
        media_type="all",
        title_strategy="filename"  # 使用文件名作为标题
    )
    print(f"\n成功处理了 {result} 个文件")
if __name__ == "__main__":
    # 检查必要的库
    try:
        from PIL import Image
        from mutagen import File
    except ImportError:
        print("请安装必要的库:")
        print("pip install Pillow mutagen")
        sys.exit(1)
    main()

简单的Shell脚本(Linux/Mac)

#!/bin/bash
# 批量添加文件标题前缀
# 配置
TARGET_DIR="./documents"
PREFIX="ProjectA_"
SUFFIX="_v1"
# 切换到目标目录
cd "$TARGET_DIR" || exit 1
# 批量重命名文件
count=0
for file in *; do
    if [ -f "$file" ]; then
        filename=$(basename "$file")
        extension="${filename##*.}"
        basename_noext="${filename%.*}"
        # 新文件名
        new_name="${PREFIX}${basename_noext}${SUFFIX}.${extension}"
        # 重命名
        mv "$file" "$new_name" && echo "✓ 已修改: $file -> $new_name" && ((count++))
    fi
done
echo "共修改了 $count 个文件"

使用说明:

  1. 选择适合您需求的脚本
  2. 安装必要的依赖(如需要)
  3. 修改配置参数(目录路径、标题规则等)
  4. 先在测试目录运行,确认效果后再用于重要文件

注意事项:

  • ⚠️ 建议先备份重要文件
  • 测试时选择较少的文件或测试目录
  • 某些操作可能需要管理员权限
  • 不同系统对文件元数据的支持程度不同

需要更具体的功能或针对特定文件类型的脚本吗?

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