恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

批量删除文件夹名关键字的三种脚本方案:批处理、PowerShell与Python实践

  • 首页
  • 资讯中心
  • /
  • 批量删除文件夹名关键字的三种脚本方案:批处理、PowerShell与Python实践

相关资讯

从原理到量产:IC烧录为何是芯片落地的隐形门槛? 2026/9/7 13:14:38
信号处理学习路线图:从数学基础到雷达、音频与生物医学应用 2026/9/7 13:14:38
AI芯片设计实战:从布局布线到流片,后端物理设计如何被强化学习改变 2026/9/7 13:14:38

最新资讯

文档上传后到底发生了什么——AI知识库从解析切分到向量检索的全链路拆解
TensorFlow Models CVRL 实战指南:时空视频对比学习(video_ssl)的训练与线性评估
Prometheus TSDB Memory Snapshot 格式解析:Head 内存快照的 WAL 记录布局与回放机制
LinkSwift网盘直链下载助手:8大网盘直链获取指南,让下载不再绕弯
Video2X教程:3条命令把480p老视频拉到1080p
Mypy 静态类型检查到底能干什么?一份带你避坑的完整上手指南

今日推荐

基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现
UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南
BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析

本周热门

超人会飞不算本事:系统稳定依赖清晰规则与边界设计
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
基于CNN的调制信号识别:MATLAB实现时频图分类实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

批量删除文件夹名关键字的三种脚本方案:批处理、PowerShell与Python实践

发布时间:2026/9/7 13:14:38
批量删除文件夹名关键字的三种脚本方案:批处理、PowerShell与Python实践 在整理电脑文件时最耗时的操作之一就是把一批文件夹名里的相同关键字去掉。比如课程目录统一带着“【完结】”、项目备份目录带着“_final”、导出文件目录带着“来源-”前缀。手动右键重命名文件夹少时还行一旦文件夹数量超过几十个手动处理既慢又容易漏改还会因为名称大小写、前后缀位置不同而反复核对。更现实的情况是你并不想删除整个文件夹只想清理命名中的干扰信息让目录看起来更整齐或者让文件夹名能被其它自动化脚本正确识别。这里说的“关键字”是指文件夹名称中重复出现的文本片段和编程语言里的保留字不是一回事。本文提供批处理、PowerShell 和 Python 三种批量删除文件夹名关键字的实现方式并重点说明执行前如何备份、执行后如何验证以及遇到权限、编码和重名冲突时如何排查。1. 先弄清楚“关键字删除”到底删的是什么1.1 这里的“关键字”是文件夹名中的文本片段在文件整理场景中“关键字”指的不是数据库字段、也不是编程语法里的keyword而是文件夹名称中出现频率较高的字符串。例如D:\downloads ├─ 课程A【完结】 ├─ 课程B【完结】 ├─ 复习笔记【完结】2024 ├─ 项目源代码【完结】v2 └─ 普通文件夹如果目标是把“【完结】”从所有文件夹名里去掉转换结果应该是D:\downloads ├─ 课程A ├─ 课程B ├─ 复习笔记2024 ├─ 项目源代码v2 └─ 普通文件夹这里只做目录名替换不会删除目录内容也不会移动文件。注意“普通文件夹”没有关键字应该保持不变。脚本必须能自动判断“名称是否包含关键字”以及“替换后的新名称是否和旧名称相同”。1.2 批量删除其实包含三个动作识别、替换、校验把一次批量重命名拆开看步骤非常固定遍历目标目录下所有文件夹。对每个文件夹名执行字符串替换去掉指定关键字。检查新名称是否为空、是否与已有文件夹冲突然后执行重命名。真正的难点不在替换本身而在边界情况。新名称为空怎么办。新名称已经存在怎么办。权限不足怎么办。脚本执行到一半失败怎么办。这些边界情况和生产环境遇到的真实问题关系更大。1.3 批处理、PowerShell、Python 三套工具怎么选三种方案各有适用场景做一个简单的对比方案支持系统安装依赖试运行能力正则能力主要风险批处理Windows无需安装手动模拟不支持特殊字符处理繁琐、延迟变量易踩坑PowerShellWindows系统自带-WhatIf或 dry-run 变量支持执行策略、正则转义PythonWindows / Linux / macOS需安装 Python自带 dry-run 参数支持环境依赖、编码问题批量处理少量目录用批处理足够。处理规则简单但文件夹名包含括号、点号、空格等特殊字符时建议用 Python 或 PowerShell。需要做正则匹配、需要递归子目录、需要输出结构化日志时Python 更合适。2. 动手前先完成备份、测试目录和运行环境准备2.1 不要直接在生产目录里跑脚本批量重命名一旦写错替换规则可能把一批文件夹名改得面目全非。比如关键字写得太短把course_final_v1里的_删掉结果变成coursefinalv1。这类错误靠事后手工恢复非常痛苦。最稳妥的做法是操作前先备份目录结构。Windows 下可以用 robocopy 保留目录结构robocopy D:\rename_test D:\rename_test_backup /E /COPY:DAT /R:2 /W:2如果目录特别大至少拷贝一份文件夹名清单作为回滚依据Get-ChildItem -Path D:\rename_test -Directory | Select-Object -ExpandProperty Name | Sort-Object | Out-File D:\before.txt -Encoding UTF82.2 建一个最小测试目录脚本第一次执行前先用一个专门测试目录验证规则。建议目录结构这样放D:\rename_test ├─ 课程A【完结】 ├─ 课程B【完结】 ├─ 学习资料【完结】2024 ├─ 项目源代码【完结】v2 └─ 普通文件夹测试目录里至少包含四类情况名称中间包含关键字、名称开头或结尾包含关键字、名称不包含关键字、以及关键字删除后可能为空的极端情况。用这个小目录跑通脚本再处理真实目录。2.3 确认运行环境批处理不需要额外环境双击.bat文件或进入命令行执行即可。PowerShell 需要确认系统版本Windows 10 以上一般自带 PowerShell 5.1新版也可以安装 PowerShell 7。Python 方案需要先确认本机是否已安装python --version如果提示找不到命令需要先安装 Python 并勾选“Add Python to PATH”。不同系统之间 Python 脚本行为基本一致这也是跨平台方案的优势。3. Windows 下用批处理批量删除文件夹名关键字3.1 完整批处理脚本批处理适合在 Windows 环境中快速完成简单替换。下面脚本删除D:\rename_test下所有文件夹名中的“【完结】”echo off setlocal enabledelayedexpansion set keyword【完结】 set baseD:\rename_test for /d %%i in (%base%\*) do ( set name%%~nxi set new!name:%keyword%! if !new! ( echo [SKIP] 新名称为空, skip %%i ) else if not !name!!new! ( if not exist %base%\!new! ( ren %%i !new! echo [OK] %%i -^ !new! ) else ( echo [SKIP] !new! already exists, skip %%i ) ) ) echo. echo 批量重命名完成。 pause保存为rename_folder.bat按目标目录修改keyword和base后运行。3.2 批处理脚本关键点说明setlocal enabledelayedexpansion这行最容易忽略。批处理中%var%在括号代码块被解析时只展开一次循环内的变量更新值无法直接通过%xxx%读取。必须用!xxx!这种延迟变量写法脚本才能正确处理每次循环的不同值。for /d %%i in (%base%\*)表示只遍历目录文件不包含普通文件。for /d是目录遍历%%i得到的是完整路径。要通过%%~nxi取出最后一级名称。set new!name:%keyword%!是字符串替换语法含义是把name中出现的%keyword%替换为空。这里的%keyword%在解析时已经展开所以关键字本身即使包含中文字符只要文件保存编码和命令提示符代码页一致就能正常匹配。脚本里加了两个保护条件new为空时跳过避免把整个文件夹改成一个空名称。新名称已存在时跳过避免覆盖同名目录。3.3 批处理方案的两个明显局限第一个局限是特殊字符。如果文件夹名包含!在某些版本的命令提示符下会被延迟变量解析打断。如果关键字本身包含%或等符号批处理替换会变得不可控。遇到这类名称优先选择 PowerShell 或 Python。第二个局限是编码。脚本文件保存为 UTF-8 时在中文 Windows 命令提示符中可能出现乱码。可以先在脚本开头执行chcp 65001 nul切换代码页但仍要避免在不同语言系统之间直接复制脚本。如果只是自己电脑上用保持脚本和系统代码页一致即可。4. PowerShell 脚本实现更灵活的关键字删除4.1 基础版遍历目录并删除关键字PowerShell 的优势在于对象化操作和内置日志能力。基础版脚本如下$keyword 【完结】 $base D:\rename_test Get-ChildItem -Path $base -Directory | ForEach-Object { $oldName $_.Name $newName $oldName.Replace($keyword, ) if ($newName -eq $oldName) { return } if ([string]::IsNullOrWhiteSpace($newName)) { Write-Warning 新名称为空跳过: $oldName return } $targetPath Join-Path -Path $_.Parent.FullName -ChildPath $newName if (Test-Path -Path $targetPath) { Write-Warning 目标已存在跳过: $oldName - $newName return } Rename-Item -Path $_.FullName -NewName $newName Write-Host [OK] $oldName - $newName -ForegroundColor Green }这里用.Replace()而不是-replace是有意避开了正则表达式。-replace左侧是正则匹配如果关键字里包含(、)、.、[等字符结果会和预期完全不同。比如关键字(1)用-replace (1), 实际上会删除字符1留下空括号用.Replace((1), )才会删除完整的“(1)”。4.2 增强版试运行模式、日志和错误记录生产环境里直接让脚本“闷头改名”风险太高。下面增强版增加了dryRun开关、日志文件和异常捕获$keyword 【完结】 $base D:\rename_test $logFile D:\rename_test\rename_log.txt $dryRun $true $folders Get-ChildItem -Path $base -Directory foreach ($folder in $folders) { $oldName $folder.Name $newName $oldName.Replace($keyword, ) if ($newName -eq $oldName) { continue } if ([string]::IsNullOrWhiteSpace($newName)) { Write-Warning 新名称为空跳过: $oldName Add-Content -Path $logFile -Value WARN; $oldName; 新名称为空 continue } $targetPath Join-Path -Path $folder.Parent.FullName -ChildPath $newName if (Test-Path -Path $targetPath) { Write-Warning 目标已存在跳过: $oldName - $newName Add-Content -Path $logFile -Value WARN; $oldName; $newName; 目标已存在 continue } if ($dryRun) { Write-Host [DRY RUN] $oldName - $newName -ForegroundColor Yellow } else { try { Rename-Item -Path $folder.FullName -NewName $newName -ErrorAction Stop Write-Host [OK] $oldName - $newName -ForegroundColor Green Add-Content -Path $logFile -Value OK; $oldName; $newName; $(Get-Date -Format yyyy-MM-dd HH:mm:ss) } catch { Write-Error 重命名失败: $oldName ; $($_.Exception.Message) Add-Content -Path $logFile -Value ERROR; $oldName; $newName; $($_.Exception.Message) } } }先确认dryRun $false之前脚本只会输出将要发生的变更不会真正执行重命名。日志用分号分隔字段方便后续导入 Excel 或进行文本过滤。4.3 PowerShell 方案的适用边界PowerShell 最大的坑是执行策略。有些机器默认禁止执行.ps1脚本运行报错时可以用下面的命令查看策略Get-ExecutionPolicy临时放开当前用户限制Set-ExecutionPolicy -Scope CurrentUser RemoteSigned不管是批处理还是 PowerShell脚本都应该放在待处理目录之外避免自身的.ps1文件或日志文件被当作业务目录处理。PowerShell 的-Directory只处理目录不会处理.ps1文件本身但如果目录内部还包含子目录脚本默认不递归。确认是否有递归需求后再决定是否加上-Recurse。5. 用 Python 在跨平台环境中批量删除关键字5.1 Python 方案的使用场景Python 方案的优势在于跨平台、逻辑清晰、支持复杂规则。比如需要删除多个不同关键字、需要递归子目录、需要把改名记录导出为 JSON 结构化日志Python 处理起来都更顺手。5.2 完整脚本import argparse import logging from pathlib import Path def rename_folders(base: Path, keyword: str, dry_run: bool): if not base.exists() or not base.is_dir(): logging.error(目标目录不存在: %s, base) return for child in base.iterdir(): if not child.is_dir(): continue old_name child.name new_name old_name.replace(keyword, ) if not new_name: logging.warning(新名称为空跳过: %s, old_name) continue if new_name old_name: continue target child.with_name(new_name) if target.exists(): logging.warning(目标名称冲突跳过: %s - %s, old_name, new_name) continue if dry_run: logging.info([试运行] %s - %s, old_name, new_name) else: try: child.rename(target) logging.info([已执行] %s - %s, old_name, new_name) except OSError as exc: logging.error(重命名失败: %s, 错误: %s, old_name, exc) if __name__ __main__: parser argparse.ArgumentParser(description批量删除文件夹名中的关键字) parser.add_argument(--base, requiredTrue, help待处理的目标目录) parser.add_argument(--keyword, requiredTrue, help需要删除的文件夹名字符串) parser.add_argument(--dry-run, actionstore_true, help只打印结果不执行重命名) args parser.parse_args() logging.basicConfig( levellogging.INFO, format%(asctime)s | %(levelname)s | %(message)s, datefmt%Y-%m-%d %H:%M:%S, ) rename_folders(Path(args.base), args.keyword, args.dry_run)使用方式python rename_folders.py --base D:\rename_test --keyword 【完结】 --dry-run python rename_folders.py --base D:\rename_test --keyword 【完结】第一次运行加--dry-run只输出日志不执行修改。确认结果后再去掉参数正式执行。5.3 脚本中的异常处理与日志设计Path.iterdir()返回目录下所有子项child.is_dir()过滤掉普通文件避免误改文件。old_name.replace(keyword, )是字面替换不使用正则因此括号、点号等特殊字符不会触发意外规则。child.rename(target)在 Windows 和 Linux 上都可用。如果目标名称已经存在某些系统会直接报错某些系统会尝试覆盖因此冲突提前判断非常必要。脚本用target.exists()提前阻断避免覆盖已有目录。dry_run参数是安全设计的核心。CLI 写法比在脚本里改常量更灵活多个目录可以复用同一个脚本也方便接入定时任务或构建流水线。5.4 中文编码问题怎么处理Python 3 默认源码编码是 UTF-8日志输出到 Windows 命令提示符时可能因为终端代码页不同显示乱码。可以设置环境变量让输出更稳定set PYTHONIOENCODINGutf-8 python rename_folders.py --base D:\rename_test --keyword 【完结】 --dry-run如果要把日志写入文件建议在logging.basicConfig里显式指定encodingutf-8。在 Python 3.9 以上版本中FileHandler支持该参数可以避免 Windows 默认写文件编码带来的乱码问题。6. 执行后如何验证确认没有误删和漏改6.1 重命名前后目录清单对比执行前先导出一份文件夹清单Get-ChildItem -Path D:\rename_test -Directory | Select-Object -ExpandProperty Name | Sort-Object | Out-File D:\before.txt -Encoding UTF8执行完成后再导出Get-ChildItem -Path D:\rename_test -Directory | Select-Object -ExpandProperty Name | Sort-Object | Out-File D:\after.txt -Encoding UTF8用Compare-Object查看差异Compare-Object (Get-Content D:\before.txt) (Get-Content D:\after.txt)预期结果只有带关键字的名称发生改变没有关键字或不需要变化的名称不应该出现在差异列表中。如果出现额外差异说明替换规则过宽。6.2 日志文件检查执行脚本时如果已输出日志检查重点有三个日志中是否有ERROR行有则说明存在权限、占用或路径问题。日志中是否有WARN行有则说明存在重名冲突或空名称被跳过。对比日志中成功条数和实际变化文件夹数是否一致。PowerShell 日志字段用分号分隔可以用Import-Csv -Delimiter ;直接加载分析。Python 脚本的日志则可以直接用文本工具搜索关键字。6.3 手工抽查清单批量验证不等于全量验证最后仍建议抽查检查项检查方式预期结果关键字是否完全消失在资源管理器中搜索关键字无匹配结果文件夹内容是否完整随机打开几个改名后的目录文件数量不变是否出现空名称文件夹检查名称过短的目录不应出现重名冲突是否被跳过查看日志 WARN 行冲突项未被覆盖非目标文件夹是否被改动对比 before/after 差异不应出现在差异列表7. 常见问题与排查路径7.1 运行脚本后文件夹名完全没有变化最常见原因是关键字和实际文件夹名不一致。检查方向关键字是否包含多余空格比如【完结】 。文件夹名中的括号是全角还是半角。批处理脚本是否在错误的目录下运行。当前执行目录是否指向了%base%。先让脚本输出每个文件夹处理前后的名称确认匹配没有生效再执行重命名。批处理里可以用echo !name! -^ !new!PowerShell 里可以临时用Write-Host打印。7.2 提示“访问被拒绝”或者“另一个程序正在使用”原因一般有三个文件夹被编辑器、终端或资源管理器占用。当前账号对该目录没有写权限。目录或文件设置了只读属性。处理顺序先关闭可能打开该目录的程序再用管理员身份运行终端最后检查只读属性Get-ChildItem -Path D:\rename_test -Directory | Where-Object { $_.IsReadOnly } | Format-List FullName7.3 中文关键字变成乱码或匹配失败批处理场景下通常是因为脚本文件编码与命令提示符代码页不一致。建议把.bat文件保存为 ANSI 编码或统一切换到chcp 65001再运行。PowerShell 和 Python 遇到中文关键字时先确认终端和脚本文件都使用 UTF-8再执行测试。7.4 脚本文件放在待处理目录内部虽然for /d和Get-ChildItem -Directory都只处理目录不会误改.bat或.ps1文件但日志文件如果放在目标目录内部日志名可能被当成新目录名造成混淆。建议把脚本、日志都放在目标目录之外保持待处理目录干净。7.5 重命名后出现同名冲突同名冲突是批量重命名最常见的问题。比如a【完结】和a同时存在删掉关键字后两个目录都会变成a。脚本在检测到目标已存在时应该跳过并记录警告防止覆盖。冲突场景原因建议处理多个目录删除关键字后同名原始命名不规范先检查冲突列表人工规划改名顺序目标目录是空目录目录本身存在重命名会失败直接跳过避免覆盖大小写不同但系统不识别差异Windows 默认不区分大小写在 Linux 上先处理或先人工合并8. 从一次重命名到文件整理的最佳实践8.1 发布重命名脚本前应完成的检查清单这份清单可以直接复制到自己的项目文档里是否已经有完整备份至少包含目录名清单。是否在最小测试目录跑通过脚本。是否在试运行模式下确认所有输出符合预期。关键字是否包含正则特殊字符、空格、全角符号。脚本和日志是否放在待处理目录之外。是否确认目标存在同名文件夹时不会被覆盖。是否记录了执行前的文件夹清单。是否准备好失败后的回滚方案。8.2 推荐的执行顺序第一次处理真实目录时不要一次性处理所有文件夹。建议先拷贝一个包含典型名称的小目录验证脚本然后把脚本改成直接处理真实目录但保留dry_run模式。确认试运行结果后再执行正式重命名。好的脚本应该具备幂等性。即第一次运行把course_old_v1改成course_v1后第二次运行不会继续修改course_v1。上面三个方案都通过比较“新名称是否等于旧名称”实现了这个效果。幂等性很重要因为脚本可能因为网络中断、权限问题执行到一半修复环境后需要安全重跑。8.3 可以继续扩展的方向如果目录结构更复杂可以扩展出多个变体需求。例如递归处理子目录把for /d改成for /r /d或者在 PowerShell 的Get-ChildItem里加上-Recurse。文件名和文件夹名混合处理时把文件夹过滤条件去掉即可。需要批量替换多个关键字时可以把关键字列表写到配置文件里脚本启动时循环读取。用脚本做批量重命名的本质是让机械化的修改过程变得可预期、可回滚、可重复。它解决的不只是“省一次鼠标点击”而是让后续的整理动作更规范。建议把一个通用的rename_folders.py脚本保存为本地工具配上必要的日志路径和备份脚本下次面对杂乱目录时就能直接复用而不是每次临时搜索解法。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号