批量添加文件扩展信息的脚本

wen 实用脚本 2

本文目录导读:

批量添加文件扩展信息的脚本

  1. Windows PowerShell 脚本 - 批量添加文件属性
  2. Python 脚本 - 跨平台文件元数据修改
  3. Linux Bash 脚本 - 批量添加扩展属性
  4. 使用说明
  5. 注意事项

Windows PowerShell 脚本 - 批量添加文件属性

# batch-add-file-properties.ps1
# 功能:批量向文件添加扩展属性(作者、备注、标签等)
# 设置目标目录
$targetDirectory = "C:\Your\Target\Directory"
$fileFilter = "*.*"  # 可改为 *.txt, *.pdf 等
# 设置要添加的属性
$author = "张三"
$comment = "批量添加的备注信息"
$tags = "文档;报告;2024"
# 获取所有文件
$files = Get-ChildItem -Path $targetDirectory -Filter $fileFilter -File
foreach ($file in $files) {
    try {
        # 添加扩展属性(基于NTFS文件系统)
        Set-Content -Path ($file.FullName + ":Author") -Value $author
        Set-Content -Path ($file.FullName + ":Comment") -Value $comment
        Set-Content -Path ($file.FullName + ":Tags") -Value $tags
        Write-Host "已处理: $($file.Name)" -ForegroundColor Green
    }
    catch {
        Write-Host "处理失败: $($file.Name) - $_" -ForegroundColor Red
    }
}
Write-Host "完成!处理了 $($files.Count) 个文件"

Python 脚本 - 跨平台文件元数据修改

# batch_add_metadata.py
import os
from pathlib import Path
import platform
import subprocess
import datetime
def add_windows_metadata(file_path, metadata):
    """Windows系统下添加NTFS扩展属性"""
    try:
        # 使用setxattr或streams命令
        for key, value in metadata.items():
            cmd = f'echo {value} > "{file_path}:{key}"'
            subprocess.run(cmd, shell=True, capture_output=True)
        return True
    except Exception as e:
        print(f"Windows元数据添加失败: {e}")
        return False
def add_linux_metadata(file_path, metadata):
    """Linux系统下添加扩展属性"""
    try:
        for key, value in metadata.items():
            cmd = f'setfattr -n user.{key} -v "{value}" "{file_path}"'
            subprocess.run(cmd, shell=True, check=True)
        return True
    except subprocess.CalledProcessError as e:
        print(f"Linux元数据添加失败: {e}")
        return False
def add_macos_metadata(file_path, metadata):
    """macOS系统下添加扩展属性"""
    try:
        for key, value in metadata.items():
            cmd = f'xattr -w com.apple.metadata:{key} "{value}" "{file_path}"'
            subprocess.run(cmd, shell=True, check=True)
        return True
    except subprocess.CalledProcessError as e:
        print(f"macOS元数据添加失败: {e}")
        return False
def batch_add_metadata(directory, metadata, recursive=False):
    """批量添加文件元数据"""
    path = Path(directory)
    system = platform.system()
    count = 0
    pattern = '**/*' if recursive else '*'
    for file_path in path.glob(pattern):
        if file_path.is_file():
            try:
                if system == "Windows":
                    success = add_windows_metadata(str(file_path), metadata)
                elif system == "Linux":
                    success = add_linux_metadata(str(file_path), metadata)
                elif system == "Darwin":
                    success = add_macos_metadata(str(file_path), metadata)
                else:
                    print(f"不支持的系统: {system}")
                    return
                if success:
                    print(f"✓ 已处理: {file_path.name}")
                    count += 1
            except Exception as e:
                print(f"✗ 处理失败: {file_path.name} - {e}")
    print(f"\n完成!成功处理 {count} 个文件")
# 使用示例
if __name__ == "__main__":
    target_dir = input("请输入目标目录路径: ").strip()
    # 定义要添加的元数据
    metadata = {
        "author": "脚本自动添加",
        "creation_date": datetime.datetime.now().strftime("%Y-%m-%d"),
        "processed_by": "batch_add_metadata.py"
    }
    recursive = input("是否递归处理子目录? (y/n): ").strip().lower() == 'y'
    batch_add_metadata(target_dir, metadata, recursive)

Linux Bash 脚本 - 批量添加扩展属性

#!/bin/bash
# batch-add-xattr.sh
# 批量在Linux系统下添加文件扩展属性
# 设置目标目录
TARGET_DIR="/path/to/your/files"
RECURSIVE=false
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
# 设置要添加的属性
AUTHOR="管理员"
COMMENT="通过脚本批量添加"
VERSION="1.0"
# 检查setfattr是否可用
if ! command -v setfattr &> /dev/null; then
    echo -e "${RED}错误: setfattr 未安装,请先安装attr包${NC}"
    echo "Ubuntu/Debian: sudo apt-get install attr"
    echo "CentOS/RHEL: sudo yum install attr"
    exit 1
fi
# 处理函数
process_file() {
    local file="$1"
    # 添加扩展属性
    if setfattr -n user.author -v "$AUTHOR" "$file" && \
       setfattr -n user.comment -v "$COMMENT" "$file" && \
       setfattr -n user.version -v "$VERSION" "$file"; then
        echo -e "${GREEN}✓${NC} $file"
        return 0
    else
        echo -e "${RED}✗${NC} $file"
        return 1
    fi
}
# 批量处理
echo "开始批量添加扩展属性..."
count=0
total=0
if [ "$RECURSIVE" = true ]; then
    while IFS= read -r -d '' file; do
        ((total++))
        if process_file "$file"; then
            ((count++))
        fi
    done < <(find "$TARGET_DIR" -type f -print0)
else
    for file in "$TARGET_DIR"/*; do
        if [ -f "$file" ]; then
            ((total++))
            if process_file "$file"; then
                ((count++))
            fi
        fi
    done
fi
echo -e "\n完成!成功处理 ${count}/${total} 个文件"

使用说明

Windows PowerShell

# 运行前请设置执行策略
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
# 运行脚本
.\batch-add-file-properties.ps1

Python脚本

# 安装依赖(如果有的话)
pip install pathlib  # Python 3.4+ 内置
# 运行脚本
python batch_add_metadata.py

Linux Bash脚本

# 给脚本添加执行权限
chmod +x batch-add-xattr.sh
# 运行脚本
./batch-add-xattr.sh

注意事项

  1. 文件系统兼容性

    • NTFS扩展属性:Windows专用
    • ext2/3/4扩展属性:Linux专用
    • HFS+/APFS扩展属性:macOS专用
  2. 权限要求

    • Windows:需要文件写入权限
    • Linux/macOS:可能需要sudo权限
  3. 备份建议

    • 处理大量文件前建议先备份
    • 可以先在小范围测试
  4. 属性类型限制

    • 扩展属性的名称和值有长度限制
    • 某些特殊字符可能需要转义

根据您的具体需求选择合适的脚本,并根据实际系统环境调整代码。

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