notepad++无法直接批量修改文件后缀,必须借助外部命令:nppexec调用cmd的ren命令适用于单层目录;powershell脚本支持递归、中文路径和正则;python script插件适合复杂逻辑判断。

Notepad++ 本身不能批量改后缀,别白费劲 Ctrl+H
你用 Ctrl+H 把所有 .log 替换成 .bak,只是改了文件内容里的字符串,磁盘上那几十个文件名一个都没动。Notepad++ 是文本编辑器,不是文件管理器——它没权限碰文件名、路径或属性。
常见错误现象:
• 资源管理器里图标还是旧的
• 双击依然用记事本打开(因为关联没变)
• 文件浏览器里右键“重命名”发现名字根本没变
- 真正生效的操作必须调用系统命令:
ren、Rename-Item或mv - Notepad++ 在这事里只干三件事:生成命令、粘贴路径、触发执行(靠插件桥接)
- 所有“在 Notepad++ 里改后缀”的方案,本质都是借壳跑外部命令
NppExec + cmd:适合单层目录、路径不含中文的快速改法
前提是已装 NppExec 插件(Plugins → Plugins Admin → 勾选 NppExec)。操作链路短,但容错差。
- 把目标文件全拖进「文件浏览器」→ 右键 →
Copy Full Paths - 新建文档粘贴,用
Ctrl+H替换\r\n为空格,得到一行路径:"C:\a\1.log" "C:\a\2.log"(引号不能少) - 按
F6打开 NppExec 控制台,输入:cmd /c for %i in ($(CURRENT_WORD)) do @ren "%~i" "%~ni.bak"
注意点:
• %~ni 提取不带后缀的文件名,%~i 是完整路径
• 路径含空格时,"%~i" 和 "%~ni.bak" 都必须加英文双引号,否则 ren 截断报错
• ren 不支持跨盘符、不支持正则、不递归子目录
PowerShell 脚本:推荐用于子目录、条件过滤或中文路径
Notepad++ 这里只当草稿本,真干活的是 PowerShell。它自带预览、递归、正则和中文路径兼容性。
- 在目标文件夹 Shift+右键 →
在此处打开 PowerShell 窗口 - 先预览(不会真改):
Get-ChildItem *.log -Recurse | Rename-Item -NewName { $_.Name -replace '\.log$', '.bak' } -WhatIf - 确认无误后删掉
-WhatIf再执行 - 若只想改文件(跳过同名文件夹),加
-File参数:Get-ChildItem -Recurse -File *.log
优势:
• -WhatIf 能看到每条将要执行的重命名动作
• -Recurse 天然支持多层嵌套
• 正则替换比 ren 灵活得多(比如只改最后出现的 .log)
• 对中文路径、空格、特殊字符基本无感
Python Script 插件:适合需要逻辑判断的复杂场景
比如“只改今天修改过的 .tmp 文件”或“排除 node_modules 目录”。前提是已装 Python Script 插件,且 Notepad++ 界面语言设为英文(否则菜单命令识别失败)。
- Plugins → Python Script → New script,存为
batch_rename.py - 脚本里用
os.walk()遍历,用os.path.getmtime()判断时间,用os.rename()执行 - 关键风险点:
os.rename()不跨盘符;路径分隔符要用os.sep或pathlib.Path,别硬写\或/
容易被忽略的细节:
• Python 脚本编码必须是 UTF-8 无 BOM,否则中文路径读不出来
• Notepad++ 安装路径不能含中文,否则插件加载失败
• notepad.open() 和 notepad.save() 是操作文件内容的,跟改后缀无关——别混用











