本文目录导读:

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
注意事项
-
文件系统兼容性:
- NTFS扩展属性:Windows专用
- ext2/3/4扩展属性:Linux专用
- HFS+/APFS扩展属性:macOS专用
-
权限要求:
- Windows:需要文件写入权限
- Linux/macOS:可能需要sudo权限
-
备份建议:
- 处理大量文件前建议先备份
- 可以先在小范围测试
-
属性类型限制:
- 扩展属性的名称和值有长度限制
- 某些特殊字符可能需要转义
根据您的具体需求选择合适的脚本,并根据实际系统环境调整代码。