批量添加文件前缀的脚本

wen 实用脚本 1

本文目录导读:

批量添加文件前缀的脚本

  1. Bash 脚本版本(Linux/macOS)
  2. Python 脚本版本(跨平台)
  3. 增强版 Python 脚本(带更多功能)
  4. Windows 批处理版本
  5. 使用说明

我来为您提供几个批量添加文件前缀的脚本,包含不同版本以适应不同需求。

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

主要功能:

  1. 自定义前缀:指定要添加的前缀文本
  2. 目录选择:可指定目标目录
  3. 递归处理:可包含子目录
  4. 日期戳:自动添加日期到前缀
  5. 预览模式:先预览效果再执行
  6. 扩展名过滤:只处理特定类型的文件

注意事项:

  • 运行前建议先备份重要文件
  • 脚本默认不会覆盖已存在的文件
  • 建议先使用 --dry-run 或预览功能确认效果

选择最适合您需求的版本,如有特定要求可以告诉我,我可以帮您调整脚本!

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