我有 mp3 文件(名称长度不同),并且想要删除批处理文件旁边的每个 mp3 文件“.mp3”之前的最后三个字符。
例如foobar043.mp3
需要成为foobar.mp3
这听起来很简单,但我已经尝试了很多方法来做到这一点(使用批处理文件中的 PowerShell),并尝试仅使用批处理命令来完成 - 使用 SuperUser 上已有的答案。
我的最后一个命令最接近,但它也删除了文件扩展名。这缩短为命令本身:
gci *.mp3 | rename-item -newname { $_.name.substring(0,$_.name.length-7) }
现在,如果有某种方法可以在末尾保留“ .mp3”(或者将现在没有扩展名的文件重命名回 .mp3 而无需重命名文件夹!)它将工作正常。
人们通常会要求列出已经尝试过的方法,但这个问题最终会长十倍!这样说吧,如果你在 Google 中输入“powershell 从文件名中删除最后一个字符”,我已经尝试了迄今为止找到的所有方法。
仅举几个尝试接受(并投票)答案的例子:
- https://stackoverflow.com/questions/33255834/powershell-rename-filename-by-removing-the-last-few-characters
- https://stackoverflow.com/questions/57202742/how-to-remove-last-x-number-of-character-from-file-name
- https://stackoverflow.com/questions/29636714/remove-end-of-filename-using-powershell
- https://stackoverflow.com/questions/10396769/powershell-remove-last-3-characters-from-file-name
(以及 spiceworks 和 reddit 上的答案,如果这里不允许的话我不会链接到它们)。
提前感谢任何知道如何做到这一点的人同时保留文件扩展名。
这是一个难题,因为通常我可以将文件名(不带扩展名)设置为变量,但由于 PowerShell 要重命名该文件,因此该变量实际上变得毫无用处。
答案1
看看这是否是你想要的:
@echo off
setlocal EnableDelayedExpansion
for %%a in (*.mp3) do (
set "SName=%%~na"
ren "%%a" "!SName:~0,-3!%%~xa"
)
exit
答案2
您正在删除最后 7 个字符,因此扩展名显然会被删除。您应该只替换BaseName
gci *.mp3 | rename-item -newname { $_.basename.substring(0,$_.basename.length-3) + $_.extension }