如何用一条命令批量移除文件名的前n个字符
如何用一条命令批量移除文件名的前n个字符
嘿,我明白你的需求了——要批量去掉文件名开头固定数量的字符,刚好你的例子里前缀长度是固定的,下面分不同操作系统给你实用的命令方案:
Linux/macOS 终端方案
方法1:用rename命令(更简洁)
假设你需要去掉前25个字符(对应你例子里的Song-01-Artist-JohnDoe - 前缀长度),直接在文件所在目录运行:
rename 's/^.{25}//' *.mp3
- 解释:
^.{25}匹配文件名开头的任意25个字符,//表示把匹配到的内容替换为空,*.mp3指定要处理的文件类型。 - 调整:把命令里的
25换成你实际需要移除的字符数即可。
方法2:用for循环(更通用,适合没有rename命令的环境)
同样处理前25个字符:
for f in *.mp3; do mv "$f" "${f:25}"; done
- 解释:
${f:25}是bash的字符串截取语法,意思是从第25个字符索引开始(索引从0开始)截取文件名的剩余部分;mv命令负责重命名。 - 测试建议:先把
mv换成echo,预览新文件名是否正确:for f in *.mp3; do echo "$f" → "${f:25}"; done
Windows 系统方案
方案1:PowerShell(推荐,语法更直观)
打开PowerShell,切换到文件所在目录,运行:
Get-ChildItem *.mp3 | Rename-Item -NewName { $_.Name.Substring(25) }
- 解释:
Get-ChildItem *.mp3获取所有mp3文件,Substring(25)表示跳过前25个字符,保留后面的部分。 - 测试建议:先把
Rename-Item换成Select-Object预览结果:Get-ChildItem *.mp3 | Select-Object @{Name='OldName';Expression={$_.Name}}, @{Name='NewName';Expression={$_.Name.Substring(25)}}
方案2:CMD命令提示符
CMD需要开启延迟环境变量扩展才能实现,步骤如下:
- 打开CMD,切换到文件所在目录;
- 先执行开启延迟扩展的命令:
setlocal enabledelayedexpansion - 然后运行重命名命令:
for %f in (*.mp3) do set "fname=%f" & ren "%f" "!fname:~25!"
- 解释:
!fname:~25!是CMD的字符串截取语法,意思是从第25位开始截取文件名;如果是写在批处理文件(.bat)里,要把%f改成%%f。
备注:内容来源于stack exchange,提问作者Fred Philip
相关产品推荐
相关产品推荐

