本文目录导读:

我来为您提供几个批量添加文件前缀的脚本,包含不同版本以适应不同需求。
Bash 脚本版本(Linux/macOS)
#!/bin/bash
# 批量添加文件前缀脚本
# 使用方法: ./add_prefix.sh [前缀] [目录]
# 设置默认值
PREFIX="${1:-new_}" # 默认前缀为 new_
TARGET_DIR="${2:-.}" # 默认当前目录
# 检查目录是否存在
if [ ! -d "$TARGET_DIR" ]; then
echo "错误:目录 '$TARGET_DIR' 不存在"
exit 1
fi
cd "$TARGET_DIR"
# 计数器
count=0
# 遍历所有文件(不包括目录和隐藏文件)
for file in *; do
# 跳过目录
[ -f "$file" ] || continue
# 跳过已经包含前缀的文件
[[ "$file" == "$PREFIX"* ]] && continue
# 新文件名
new_file="${PREFIX}${file}"
# 重命名文件
mv "$file" "$new_file"
echo "重命名: '$file' -> '$new_file'"
((count++))
done
echo "完成!共重命名 $count 个文件"
Python 脚本版本(跨平台)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
from pathlib import Path
def add_prefix(prefix, target_dir=".", auto_confirm=True):
"""
批量添加文件前缀
参数:
prefix: 要添加的前缀
target_dir: 目标目录
auto_confirm: 是否自动确认(True为直接执行,False为询问)
"""
# 检查目录
target_path = Path(target_dir)
if not target_path.exists():
print(f"错误:目录 '{target_dir}' 不存在")
return
if not target_path.is_dir():
print(f"错误:'{target_dir}' 不是目录")
return
# 获取所有文件
files = []
for item in target_path.iterdir():
if item.is_file() and not item.name.startswith('.'):
if not item.name.startswith(prefix):
files.append(item)
if not files:
print("没有需要重命名的文件")
return
# 显示将要重命名的文件
print(f"将重命名 {len(files)} 个文件:")
for f in files:
print(f" {f.name} -> {prefix}{f.name}")
# 确认操作
if not auto_confirm:
confirm = input("\n确认执行重命名?(y/n): ").lower()
if confirm != 'y':
print("操作已取消")
return
# 执行重命名
success_count = 0
for file in files:
new_name = prefix + file.name
new_path = file.parent / new_name
try:
# 检查目标文件是否已存在
if new_path.exists():
print(f"跳过:'{new_name}' 已存在")
continue
file.rename(new_path)
print(f"重命名: '{file.name}' -> '{new_name}'")
success_count += 1
except Exception as e:
print(f"错误:重命名 '{file.name}' 失败 - {str(e)}")
print(f"\n完成!成功重命名 {success_count} 个文件")
def main():
# 命令行参数处理
if len(sys.argv) > 3:
print("使用方法: python add_prefix.py [前缀] [目录]")
sys.exit(1)
prefix = sys.argv[1] if len(sys.argv) >= 2 else input("请输入前缀: ")
target_dir = sys.argv[2] if len(sys.argv) == 3 else "."
# 询问是否确认
add_prefix(prefix, target_dir, auto_confirm=False)
if __name__ == "__main__":
main()
增强版 Python 脚本(带更多功能)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
批量文件前缀添加工具
支持:
- 自定义前缀
- 添加日期时间戳
- 递归处理子目录
- 预览模式
- 日志记录
"""
import os
import sys
import shutil
from pathlib import Path
from datetime import datetime
import argparse
import logging
class BatchPrefixer:
def __init__(self, prefix="new_", target_dir=".", recursive=False,
add_date=False, dry_run=False, extensions=None):
self.prefix = prefix
self.target_dir = Path(target_dir)
self.recursive = recursive
self.add_date = add_date
self.dry_run = dry_run # 预览模式
self.extensions = extensions # 文件扩展名过滤
# 设置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('prefix_batch.log'),
logging.StreamHandler()
]
)
self.logger = logging.getLogger(__name__)
def should_process(self, file_path):
"""判断是否应该处理该文件"""
# 跳过隐藏文件
if file_path.name.startswith('.'):
return False
# 检查扩展名
if self.extensions:
if file_path.suffix.lower() not in self.extensions:
return False
# 检查是否已有前缀
if file_path.name.startswith(self.prefix):
return False
return True
def get_new_name(self, file_path):
"""生成新文件名"""
if self.add_date:
date_str = datetime.now().strftime("%Y%m%d")
return f"{self.prefix}{date_str}_{file_path.name}"
return f"{self.prefix}{file_path.name}"
def get_files(self):
"""获取所有需要处理的文件"""
if self.recursive:
pattern = "**/*"
else:
pattern = "*"
files = []
for item in self.target_dir.glob(pattern):
if item.is_file() and self.should_process(item):
files.append(item)
return files
def process_files(self):
"""处理所有文件"""
files = self.get_files()
if not files:
self.logger.info("没有需要处理的文件")
return
self.logger.info(f"找到 {len(files)} 个需要处理的文件")
# 显示预览
print("\n=== 操作预览 ===")
changed_files = []
for file in files:
new_name = self.get_new_name(file)
changed_files.append((file, new_name))
print(f" {file.name} -> {new_name}")
if self.dry_run:
print("\n[预览模式] 不会执行实际重命名")
return
# 执行重命名
print("\n=== 执行重命名 ===")
success = 0
failed = 0
for file, new_name in changed_files:
new_path = file.parent / new_name
# 检查目标是否存在
if new_path.exists():
self.logger.warning(f"跳过:'{new_name}' 已存在")
failed += 1
continue
try:
file.rename(new_path)
self.logger.info(f"重命名: '{file.name}' -> '{new_name}'")
success += 1
except Exception as e:
self.logger.error(f"重命名 '{file.name}' 失败: {str(e)}")
failed += 1
print(f"\n完成!成功: {success} 个, 失败: {failed} 个")
def main():
parser = argparse.ArgumentParser(description='批量添加文件前缀工具')
parser.add_argument('prefix', nargs='?', default='new_',
help='要添加的前缀(默认: new_)')
parser.add_argument('-d', '--dir', default='.',
help='目标目录(默认: 当前目录)')
parser.add_argument('-r', '--recursive', action='store_true',
help='递归处理子目录')
parser.add_argument('--date', action='store_true',
help='添加日期戳')
parser.add_argument('--dry-run', action='store_true',
help='预览模式,不实际执行')
parser.add_argument('-e', '--extensions', nargs='+',
help='只处理指定扩展名的文件,如: -e .txt .pdf')
args = parser.parse_args()
# 处理扩展名参数
extensions = None
if args.extensions:
extensions = [ext if ext.startswith('.') else f'.{ext}'
for ext in args.extensions]
prefixer = BatchPrefixer(
prefix=args.prefix,
target_dir=args.dir,
recursive=args.recursive,
add_date=args.date,
dry_run=args.dry_run,
extensions=extensions
)
prefixer.process_files()
if __name__ == "__main__":
main()
Windows 批处理版本
@echo off
chcp 65001 >nul批量添加文件前缀工具
echo ====================================
echo 批量添加文件前缀工具
echo ====================================
echo.
rem 获取前缀
set /p prefix="请输入要添加的前缀: "
if "%prefix%"=="" set prefix=new_
echo 使用前缀: %prefix%
echo.
rem 获取目录
set /p target_dir="请输入目标目录(直接回车使用当前目录): "
if "%target_dir%"=="" set target_dir=.
echo 目标目录: %target_dir%
echo.
rem 确认操作
echo 将要重命名以下文件:
for %%f in ("%target_dir%\*") do (
if not %%~nxf==%~nx0 (
if not "%%~nxf"=="%~nx0" (
echo %%~nxf -^> %prefix%%%~nxf
set /a count+=1
)
)
)
echo.
set /p confirm="确认执行重命名? (Y/N): "
if /i not "%confirm%"=="Y" (
echo 操作已取消
pause
exit /b
)
rem 执行重命名
echo.
cd /d "%target_dir%"
set success=0
for %%f in (*) do (
if not "%%f"=="%~nx0" (
if not "%%f"=="add_prefix.bat" (
ren "%%f" "%prefix%%%f"
if !errorlevel! equ 0 (
echo 重命名: %%f -^> %prefix%%%f
set /a success+=1
) else (
echo 重命名失败: %%f
)
)
)
)
echo.
echo 完成!共重命名 %success% 个文件
pause
使用说明
Bash/Python 版本:
# 基本用法 ./add_prefix.sh "prefix_" /path/to/dir # 或使用 Python 版本 python add_prefix.py "prefix_" /path/to/dir # 增强版使用示例 python enhanced_add_prefix.py "photo_" -d /photos -r --date
主要功能:
- 自定义前缀:指定要添加的前缀文本
- 目录选择:可指定目标目录
- 递归处理:可包含子目录
- 日期戳:自动添加日期到前缀
- 预览模式:先预览效果再执行
- 扩展名过滤:只处理特定类型的文件
注意事项:
- 运行前建议先备份重要文件
- 脚本默认不会覆盖已存在的文件
- 建议先使用
--dry-run或预览功能确认效果
选择最适合您需求的版本,如有特定要求可以告诉我,我可以帮您调整脚本!