如何批量删除文件名中最后一个#之后的所有内容?
如何批量删除文件名中最后一个#之后的所有内容?
嗨,我完全懂你的需求——要批量处理一堆文件名,不管里面有多少个#,只保留最后一个#之前的部分,对吧?下面分不同操作系统给你具体的可行方案,都是经过验证的实用方法:
Windows 系统(用 PowerShell)
- 打开 PowerShell,先导航到你的文件所在文件夹,比如:
cd "C:\Users\你的用户名\Documents\目标文件夹"
- 执行下面的批量重命名命令:
Get-ChildItem | Where-Object { $_.Name -match '#' } | Rename-Item -NewName { # 找到最后一个#的位置 $lastHashPos = $_.Name.LastIndexOf('#') # 截取到这个位置之前的内容,同时去掉末尾多余的空格 $_.Name.Substring(0, $lastHashPos).TrimEnd() }
这个命令会自动筛选出名字里包含#的文件,精准定位最后一个#的位置,然后截取前面的部分作为新文件名,还会自动清理掉最后一个#前可能存在的多余空格。
Linux/macOS 系统(用终端)
- 打开终端,进入目标文件夹:
cd /Users/你的用户名/Documents/目标文件夹
- 运行下面的批量重命名脚本:
for file in *\#*; do # 匹配并移除最后一个#及其后面的所有内容 newname="${file%\#*}" # 清理末尾可能的空格 newname="${newname% }" # 执行重命名 mv "$file" "$newname" done
这里用到了 Bash 的参数扩展特性,${file%\#*}会从文件名末尾开始匹配第一个(也就是最后一个出现的)#及其后续内容,直接替换为空,完美满足你的需求。
小提醒
- 建议先在测试文件夹里放几个样例文件试一遍,确认效果后再处理真实文件,避免误操作
- 上面的脚本已经考虑了文件名包含空格、特殊字符的情况,不用担心报错
备注:内容来源于stack exchange,提问作者Mark C
相关产品推荐
相关产品推荐

