基于CSV表格批量修改文件名的技术求助
基于CSV批量重命名文件的简便方案
前提准备
确保你的CSV文件格式如下(两列,表头为OldName和NewName,每行对应一组文件名):
OldName,NewName photo1.jpg,vacation_2024_01.jpg "my document.pdf","project_report_final_v2.pdf"
注:如果文件名包含逗号或空格,需给文件名包裹双引号,避免解析错误。
Windows 平台:PowerShell 脚本
- 打开PowerShell,切换到目标文件所在目录:
cd "C:\你的文件目录路径"
- 执行以下脚本(替换
rename_list.csv为你的CSV文件名):
Import-Csv .\rename_list.csv | ForEach-Object { $oldFile = $_.OldName.Trim('"') $newFile = $_.NewName.Trim('"') if (Test-Path $oldFile) { Rename-Item -Path $oldFile -NewName $newFile -Force Write-Host "已重命名:$oldFile -> $newFile" } else { Write-Warning "文件不存在:$oldFile" } }
Trim('"')用于移除文件名两端的双引号,适配含特殊字符的文件名Test-Path检查旧文件是否存在,避免无效操作报错-Force允许覆盖已存在的同名新文件,不需要可直接删除该参数
Mac/Linux 平台:Bash 命令
- 打开终端,切换到目标文件所在目录:
cd /你的文件目录路径
- 执行以下命令(替换
rename_list.csv为你的CSV文件名):
awk -F ',' 'NR>1 { old=$1; new=$2; gsub(/^"|"$/, "", old); gsub(/^"|"$/, "", new); if (system("[ -f \""old"\" ]") == 0) { system("mv -v \""old"\" \""new"\""); } else { print "文件不存在:" old; } }' rename_list.csv
NR>1跳过CSV表头行gsub用于移除文件名两端的双引号[ -f "$old" ]检查文件是否存在,mv -v输出重命名日志便于核对
跨平台方案:Python 脚本
适合所有操作系统,代码易修改维护:
- 创建
rename_files.py文件,写入以下内容:
import csv import os # 配置路径 CSV_FILE = "rename_list.csv" # 你的CSV文件路径 TARGET_DIR = "./" # 目标文件所在目录,当前目录用./即可 with open(CSV_FILE, mode='r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: old_name = row['OldName'].strip('"') new_name = row['NewName'].strip('"') old_path = os.path.join(TARGET_DIR, old_name) new_path = os.path.join(TARGET_DIR, new_name) if os.path.isfile(old_path): # 可选:添加判断避免覆盖已存在的新文件 # if not os.path.exists(new_path): os.rename(old_path, new_path) print(f"已重命名:{old_name} -> {new_name}") else: print(f"警告:文件不存在 - {old_name}")
- 运行脚本:
python rename_files.py
- 脚本自动处理带双引号的文件名,兼容特殊字符
- 可取消注释
if not os.path.exists(new_path):来避免覆盖已有文件
关键注意事项
- 先备份文件:批量操作前务必复制一份文件到其他目录,防止误操作导致数据丢失
- 确保CSV中的文件名与实际文件完全匹配(部分系统区分文件名大小写)
- 如果文件不在当前目录,需修改对应脚本中的目录路径参数
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

