本文目录导读:

我来为您提供几个批量添加文件前缀的脚本,包含不同版本以适应不同需求。
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或预览功能确认效果
选择最适合您需求的版本,如有特定要求可以告诉我,我可以帮您调整脚本!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播