Python 如何批量处理文件名中的非法字符(Windows 兼容)

Windows批量重命名含非法字符文件有五种安全方法:一、用Python正则替换;二、用pathlib+translate高效处理;三、带时间戳备份日志;四、仅扫描不修改的预检;五、用shutil.copy2保留元数据复制。

如果您需要在 Windows 系统中批量重命名文件,但文件名中包含系统禁止使用的字符(如 : " / \ | ? *),则可能导致文件无法创建、保存或同步。以下是多种安全、可逆的处理方法:

一、使用 Python 的 os 和 re 模块替换非法字符

该方法通过正则表达式识别并统一替换 Windows 文件系统禁止的字符,保留原始文件结构,适用于大多数脚本化场景。

1、导入 os 和 re 模块:
import os
import re

2、定义非法字符正则模式及替换规则:
illegal_chars = r'[:"/\\|?*]'
replacement = '_'

3、指定目标目录路径:
target_dir = r"C:\your\folder\path"

4、遍历目录内所有文件,对文件名执行替换并重命名:
for filename in os.listdir(target_dir):
  new_name = re.sub(illegal_chars, replacement, filename)
  if new_name != filename:
    old_path = os.path.join(target_dir, filename)
    new_path = os.path.join(target_dir, new_name)
    os.rename(old_path, new_path)

二、使用 pathlib 与字符串 translate 方法处理

该方法利用字符串的 translate 表高效映射非法字符,避免正则开销,适合大量小文件处理,且支持预设字符映射策略。

1、导入 pathlib 和 string:
from pathlib import Path
import string

2、构建 Windows 非法字符映射表:
illegal_map = str.maketrans({c: '_' for c in ':"/\\|?*'})

3、设置根路径对象:
root = Path(r"C:\your\folder\path")

4、递归获取所有文件路径:
for file_path in root.rglob('*'):
  if file_path.is_file():

5、生成新文件名并执行重命名:
    stem = file_path.stem.translate(illegal_map)
    suffix = file_path.suffix
    new_name = f"{stem}{suffix}"
    new_path = file_path.parent / new_name
    if new_path != file_path and not new_path.exists():
      file_path.rename(new_path)

三、保留原始文件名备份并添加时间戳前缀

该方法在重命名前自动备份原文件名至日志,并为新文件添加唯一标识,确保操作可追溯,强烈建议在生产环境首次运行时启用此方案

1、导入 datetime 模块用于生成时间戳:
from datetime import datetime

2、创建日志文件记录映射关系:
log_path = Path(r"C:\your\folder\path\rename_log.txt")
with open(log_path, "a", encoding="utf-8") as log:
  log.write(f"\n=== Batch rename at {datetime.now()} ===\n")

OpenArt

在线AI绘画艺术图片生成器工具

下载

3、对每个文件执行带日志的重命名:
for file_path in Path(r"C:\your\folder\path").iterdir():
  if file_path.is_file():
    original_name = file_path.name
    cleaned_name = re.sub(r'[:"/\\|?*]', '_', original_name)

4、写入日志并执行重命名:
    with open(log_path, "a", encoding="utf-8") as log:
      log.write(f"{original_name} → {cleaned_name}\n")
    if cleaned_name != original_name:
      new_path = file_path.parent / cleaned_name
      file_path.rename(new_path)

四、过滤并跳过已含非法字符的文件名(仅校验不修改)

该方法不执行任何重命名操作,仅扫描并输出含非法字符的文件路径,适用于审计或预检查阶段,避免误操作导致数据混乱

1、定义非法字符集合:
illegal_set = set(':"/\\|?*')

2、指定扫描路径:
scan_dir = Path(r"C:\your\folder\path")

3、遍历所有文件并检查文件名是否含非法字符:
for file_path in scan_dir.rglob('*'):
  if file_path.is_file():
    name_chars = set(file_path.name)
    if name_chars & illegal_set:

4、打印违规文件路径:
      print(f"Invalid chars found: {file_path}")

五、使用 shutil.copy2 保留元数据并重命名副本

该方法不直接修改原文件,而是创建合规命名的副本并保留修改时间、访问时间等元数据,适用于需严格保持原始文件状态的场景。

1、导入 shutil 和 os:
import shutil
import os

2、定义非法字符替换函数:
def sanitize_name(name):
  return re.sub(r'[:"/\\|?*]', '_', name)

3、设定源目录和副本输出目录:
src_dir = Path(r"C:\your\source\path")
dst_dir = Path(r"C:\your\output\path")
dst_dir.mkdir(exist_ok=True)

4、对每个文件生成合规副本:
for file_path in src_dir.iterdir():
  if file_path.is_file():
    clean_name = sanitize_name(file_path.name)
    dst_file = dst_dir / clean_name

5、复制并保留全部文件属性:
    if dst_file != file_path:
      shutil.copy2(file_path, dst_file)

相关推荐:

开源兼容层 Wine 11.13 发布:改进输入指针支持、优化 X11 键盘扫描码映射,修复 22 个 Bug

7 月 11 日消息,据科技媒体 Phoronix 昨天报道,开源兼容层 Wine 11.13 现已正式发布,带来多项改进。据报道,开发者 Rémi Bernon 为本次更新带来了输入指针支持改进,并完成多项输入相关优化。与此同时,本次更新还改进了 X11 环境的键盘扫描码(注:Scancode)映射。对于 ARM 平台用户来说,本次更新还启用了 ARM64EC 和 FFmpeg 优化。此外,Wi...

曜越光透 View 370 TG ARGB 中塔海景房机箱发售:兼容背插主板,黑白双色均售 779 元

7 月 8 日消息,曜越旗下光透 View 370 TG ARGB 中塔机箱现已在京东发售,该机采用“海景房”设计,可选黑白双色,定价均为 779 元。该机箱配备四片式强化玻璃,环绕机箱正面与侧面。前面板则采用独特的三片式玻璃,可勾勒出鲜明外形轮廓,让玩家一眼看到机箱内部主板、显卡、RGB 光效,机箱顶部、底部和电源仓都拥有可拆式防尘滤网,方便日常清灰。具体规格方面,这款机箱尺寸为 492.5 x...

EPOMAKER HE65 V2 TMR 磁轴键盘上市:649 元,PCB 兼容机械轴体

感谢网友 华南吴彦祖 的线索投递! 7 月 6 日消息,EPOMAKER 现已在国内电商平台上架 HE65 V2 TMR 键盘,到手价 649 元。该三模型号拥有轴体热插拔 PCB,预装 TMR(隧道磁阻)开关,同时也兼容机械触点式开关。HE65 V2 TMR 采用 66 按键 + 1 旋钮的 65% 紧凑配列,外壳为 ABS 材质,内部则是 Gasket 结构。其 PCB 内嵌下灯位 RGB 灯...

长城推出阿基米德 KM18 侧透机箱:支持主板背插,兼容 360 水冷,179 元

感谢网友 很宅很怕生 的线索投递! 7 月 6 日消息,长城现已在京东上架阿基米德 KM18 机箱,定价为 179 元。该机箱整体尺寸为 480x245x382mm,可容纳 MicroATX / ITX 主板(支持主板背插)。机箱使用侧透设计,顶部和正面带有大面积网孔,I/O 位于正面,提供了 1 个 USB-A 2.0、1 个 USB-A 3.0、1 个 USB-C 10Gbps 接口。该机箱显...

开源兼容层 Wine 11.12 发布:整合 FFmpeg 库,修复 27 项问题

6 月 30 日消息,科技媒体 Linuxiac 昨日(6 月 29 日)发布博文,报道称 Wine 11.12 发布,整合 FFmpeg 库,升级 Mono 11.2,并修复了 27 项问题。注:Wine 是一个开源兼容层,通过把 Windows 应用调用转换为 Linux、macOS 等系统可识别的接口,让部分 Windows 软件和游戏直接运行,常用于兼容跨平台办公软件、老游戏和专业工具。在...

小米米家 iOS 版 App 获 11.6.200 更新:新增能源模块、优化设备批量配网等功能

感谢网友 太二真人 的线索投递! 6 月 29 日消息,小米米家 iOS 版 App 今天更新 11.6.200 版本,主要是为场景页面新增了能源模块,以及新增设备批量配网等功能,提升实用性。附本次更新详情如下:新增:场景页面新增能源模块,可查看家中部分智能设备用电情况优化:家庭自动切换功能,根据手机定位展示家庭,可在家庭管理中开启设备批量配网功能,发现多个 BLE Mesh 设备时,可以批量选择...

AI 批量造富,奢侈品行业迎来全新消费主力

7 月 1 日消息,人工智能正在批量催生千万富翁,一波消费热潮随之而来。海量资本涌入人工智能初创企业与配套基础设施,企业估值一路暴涨。创始人手中账面股权化作真金白银,头部 AI 企业员工持有的股权激励也价值数百万美元。如今,人工智能催生的财富不再只停留在纸面上。初创公司创始人抛售价值数十亿美元的股权;早期员工套现短短几年内翻数倍的股份;顶尖 AI 研究员与工程师拿到的薪酬包,放在十年前的科技行业根...

CHERRY 推出 MX Lumina 樱花轴:改进键帽兼容、加长导轨、减少公差

7 月 1 日消息,CHERRY(樱桃)近日推出 MX Lumina 版本樱花轴。相较此前的 MX2A 版本,新一代樱花轴保持了基础参数设定,同时汲取了 MX Lumina 家族的升级。MX Lumina 樱花轴采用 35cN 低触发压力设计,由 POM 轴心、磨砂 PC 上盖、黄金十字触点、桶形弹簧、樱粉配色尼龙底壳组成。其总行程 3.8±0.4mm、触发行程 2.0±0.4mm,消抖时间<1m...