脚本如何批量重命名文件

wen 实用脚本 34

本文目录导读:

脚本如何批量重命名文件

  1. Windows 系统
  2. macOS/Linux 系统
  3. Python 脚本(跨平台)
  4. 使用专门软件
  5. 实际应用示例

我来为您介绍几种批量重命名文件的方法,适用于不同操作系统。

Windows 系统

PowerShell 脚本

# 示例:给所有jpg文件添加前缀
Get-ChildItem -Path "C:\YourFolder" -Filter "*.jpg" | ForEach-Object {
    $newName = "prefix_" + $_.Name
    Rename-Item -Path $_.FullName -NewName $newName
}
# 示例:替换文件名中的文字
Get-ChildItem -Path "C:\YourFolder" | ForEach-Object {
    $newName = $_.Name -replace "oldtext", "newtext"
    Rename-Item -Path $_.FullName -NewName $newName
}
# 示例:按序号重命名
$i = 1
Get-ChildItem -Path "C:\YourFolder" -Filter "*.jpg" | ForEach-Object {
    $newName = "Photo_{0:D4}.jpg" -f $i
    Rename-Item -Path $_.FullName -NewName $newName
    $i++
}

批处理脚本 (.bat)

@echo off
setlocal enabledelayedexpansion
:: 添加前缀
set count=1
for %%f in (*.txt) do (
    ren "%%f" "prefix_%%f"
)
:: 序号重命名
set count=1
for %%f in (*.jpg) do (
    set "newname=File_!count!.jpg"
    ren "%%f" "!newname!"
    set /a count+=1
)

macOS/Linux 系统

Shell 脚本

#!/bin/bash
# 添加后缀
for file in *.txt; do
    mv "$file" "new_${file}"
done
# 批量替换文件名中的文字
for file in *; do
    newname=$(echo "$file" | sed 's/old/new/g')
    mv "$file" "$newname"
done
# 序号重命名
count=1
for file in *.jpg; do
    mv "$file" "$(printf "Photo_%04d.jpg" $count)"
    ((count++))
done

使用 rename 命令

# 安装 (Ubuntu/Debian)
sudo apt install rename
# 替换文件扩展名
rename 's/\.txt$/.md/' *.txt
# 添加前缀
rename 's/^/prefix_/' *.jpg
# 大小写转换
rename 'y/a-z/A-Z/' *.jpg

Python 脚本(跨平台)

基础批量重命名

import os
folder_path = r'C:\YourFolder'  # 修改为你的文件夹路径
# 添加前缀
prefix = 'new_'
for filename in os.listdir(folder_path):
    if os.path.isfile(os.path.join(folder_path, filename)):
        new_name = prefix + filename
        os.rename(
            os.path.join(folder_path, filename),
            os.path.join(folder_path, new_name)
        )
# 按序号重命名
folder = 'C:\\YourFolder'
extensions = ['.jpg', '.png']
for i, filename in enumerate(os.listdir(folder), 1):
    if any(filename.endswith(ext) for ext in extensions):
        ext = os.path.splitext(filename)[1]
        new_name = f"Image_{i:04d}{ext}"
        os.rename(
            os.path.join(folder, filename),
            os.path.join(folder, new_name)
        )

高级功能脚本

import os
import re
from datetime import datetime
def batch_rename(folder_path, pattern, replacement):
    """
    批量重命名文件
    :param folder_path: 文件夹路径
    :param pattern: 要替换的模式(正则表达式)
    :param replacement: 替换后的内容
    """
    for filename in os.listdir(folder_path):
        if os.path.isfile(os.path.join(folder_path, filename)):
            # 使用正则替换
            new_name = re.sub(pattern, replacement, filename)
            if new_name != filename:
                os.rename(
                    os.path.join(folder_path, filename),
                    os.path.join(folder_path, new_name)
                )
                print(f"Renamed: {filename} -> {new_name}")
# 使用示例
batch_rename(r'C:\YourFolder', r'\s+', '_')  # 替换空格为下划线

使用专门软件

Windows:

  • Advanced Renamer(免费)
  • Bulk Rename Utility(免费)
  • Total Commander(付费)

macOS:

  • Name Mangler(付费)
  • Renamer(免费)
  • A Better Finder Rename(付费)

实际应用示例

清理照片文件名

# PowerShell:批量清理照片文件名
$path = "C:\Photos"
Get-ChildItem $path -Include *.jpg, *.png | 
ForEach-Object {
    $newName = $_.Name -replace 'IMG_\d+_', '' -replace '[^\w\.]', '_'
    Rename-Item -Path $_.FullName -NewName $newName -WhatIf
}

提示

  1. 在执行批量操作前,先用 -WhatIf(PowerShell)测试
  2. 建议先备份文件
  3. 使用正则表达式时要小心,避免误改

根据您的具体需求,选择最适合的方法,如果需要更复杂的重命名规则,请告诉我具体需求,我可以提供定制脚本。

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