vscode原生不支持批量正则重命名文件,必须依赖file utilities插件(需勾选use regular expression、捕获组用\1)或终端命令(macos/linux用rename或bash循环、windows用powershell),且所有操作前必须用echo预览并确认路径安全。

VSCode 本身不提供“运行并批量重命名工作区文件”的内置功能——所有真正意义上的批量文件重命名,都必须脱离编辑器 UI,走终端命令或插件中转,且无法绕过预览和路径安全校验。
为什么资源管理器里 Ctrl+多选 + F2 不行
VSCode 资源管理器的多选重命名(右键 → Rename 或 Ctrl+多选后按 F2)只支持统一模板,比如输入 file-${1}.js,它会把所有选中文件依次命名为 file-1.js、file-2.js……但无法做规则映射(如 api-user.js → userApi.js)。一旦你试图在输入框里写正则或变量引用,它会当字面量处理,甚至直接报错。
- 这不是 bug,是设计限制:VSCode 的重命名入口不解析正则,也不暴露捕获组
- 输入
${basename}_v2可以,但${basename/\-(\w)/\U$1/}会原样保留,不会执行转换 - 路径含空格或中文时,该操作大概率失败,且无错误提示,只静默跳过
File Utilities 插件怎么用才不翻车
这是目前最接近“在 VSCode 界面内完成正则重命名”的方案,但必须严格遵循其语法和开关逻辑,否则 90% 的失败源于配置漏项。
- 安装后,右键目标目录 →
File Utilities→Rename Files in Directory - 务必勾选
Use Regular Expression,否则.*\.ts就是匹配字面量.*.ts,不是通配 - 捕获组引用用
\1、\2,不是$1或${1}(VSCode 编辑器搜索里是$1,插件不兼容) - 想把
user-api.ts→userApi.ts,单步做不到:\U大写转换在部分版本不稳定,建议先用插件匹配-([a-z])替换为__UPPER__\1占位,再跑第二轮脚本 - 插件不提供 dry-run 模式,所以操作前必须手动在终端执行
ls *.ts确认范围
终端命令才是主力,三系统写法差异必须盯死
VSCode 集成终端(Ctrl+`)调用系统 shell,正则能力由底层工具提供。不同平台语法、引号、变量扩展规则完全不同,混用必出错。
- macOS/Linux(有
rename命令):rename 's/^(.*)-(\w+)\.ts$/$1$2.ts/' *.ts—— 注意单引号包裹整个表达式,防止 shell 提前展开$1 - macOS/Linux(纯 bash,无 rename):
for f in *-*.ts; do [[ $f =~ ^(.*)-([a-z])(.*\.ts)$ ]] && echo mv "$f" "${BASH_REMATCH[1]}${BASH_REMATCH[2]^}${BASH_REMATCH[3]}"; done—— 先加echo预览,"$f"必须双引号,${var^^}是 bash 4.0+ 语法 - Windows PowerShell:
Get-ChildItem *.ts | Where-Object Name -match '^(.*)-(\w+)\.ts$' | ForEach-Object { echo Rename-Item "$_.FullName" ($_.Matches[0].Groups[1].Value + $_.Matches[0].Groups[2].Value + '.ts') }——Groups[1]是第一个括号,别数错;echo不可省 - 所有命令执行前,必须确认当前目录正确:
pwd或Get-Location,避免在父目录误操作子目录
工作区名 ≠ 文件名,改名要动真实文件
VSCode 的工作区名(即 .code-workspace 文件名)不是元数据字段,而是物理文件名。所谓“重命名工作区”,本质就是重命名那个 JSON 文件本身。
- 不要试图在设置里找“工作区名称”字段去改——根本不存在
- 正确做法:菜单栏 →
文件 → 另存为工作区,输入新名字(如my-project.code-workspace),保存后关闭当前窗口,用新文件重新打开 - 旧的
xxx.code-workspace文件不会自动删除,得手动清理,否则下次打开可能弹两个工作区选项 - 同理,代码片段名(如
global-snippets.code-snippets)也是文件名,改名 = 另存为新文件名,旧文件仍存在且继续生效
真正容易被忽略的点是:所有批量操作都默认跳过只读文件、符号链接目标、以及 Git 暂存区外的未跟踪文件。如果你发现某些文件没被重命名,先检查它们的属性和 Git 状态,而不是怀疑正则写错了。











