![为什么 ren 在简单的重命名任务中留下“e”](https://linux22.com/image/1509804/%E4%B8%BA%E4%BB%80%E4%B9%88%20ren%20%E5%9C%A8%E7%AE%80%E5%8D%95%E7%9A%84%E9%87%8D%E5%91%BD%E5%90%8D%E4%BB%BB%E5%8A%A1%E4%B8%AD%E7%95%99%E4%B8%8B%E2%80%9Ce%E2%80%9D.png)
我有想要批量重命名的文件列表。
源文件的名称为“SlideXX.BMP”(XX 是从 1 到任意的数字)。
我想将它们全部重命名为“bbrdXX.BMP”
当我表演ren Slide* bbrd*
ren表演但与预期不同一切都变成了“bbrd埃XX.BMP”。
为什么会发生这种情况?
答案1
我会使用 PowerShell 来实现这一点,在 cmd 中实现你想要的功能可能会稍微复杂一些。
$x = gci C:\yourpath | % { gi $_.FullName | rni -newname ($_ -replace "Slide","bbrd") }
详细地:
- 首先,它搜索目录内具有
Get-ChildItem
别名的所有文件gci
- 然后它将循环遍历每个带有
foreach-object
别名的文件%
- 然后它通过别名的
fullname
属性调用该项目get-item
gi
- 然后该项目被传递到管道并通过
rename-item
别名重命名rni
- 在该
rni
部分内部,它将替换Slide
当前bbrd
对象并以新名称保存。
如果您的子文件夹中也包含需要重命名的文件,则要递归运行此操作,只需添加-r
到您的gci
调用中,并添加filter
仅针对您想要的文件:
$x = gci C:\yourpath -r -filter *.bmp | % { [...] }
答案2
Slide 有 5 个字母长。BBRD 有 4 个字母长。如果您可以使用 bbrd_,那么 e 也将被替换。如果您愿意,请执行以下两个步骤:
- ren "幻灯片*" "/。“
- ren lide* bbcd*
第一个 ren 删除 S 或将长度减少 1。第二个 ren 然后无误地转换为 bbrd,因为 lide 也有 4 个字母
答案3
我认为批处理不需要complex
脚本。它很简单,
@echo off & setlocal EnableExtensions EnableDelayedExpansion
for %%A in (Slide*.bmp) do Set A=%%~nxA&Ren "%%A" "!A:Slide=bbrd!"
如果默认启用了 DelayedExpansion,那么它也是一个控制台单行代码:
for %A in (Slide*.bmp) do Set A=%~nxA&Ren "%A" "!A:Slide=bbrd!"