为什么 ren 在简单的重命名任务中留下“e”

为什么 ren 在简单的重命名任务中留下“e”

我有想要批量重命名的文件列表。

源文件的名称为“SlideXX.BMP”(XX 是从 1 到任意的数字)。

我想将它们全部重命名为“bbrdXX.BMP”

当我表演ren Slide* bbrd*ren表演但与预期不同一切都变成了“bbrdXX.BMP”。

为什么会发生这种情况?

答案1

我会使用 PowerShell 来实现这一点,在 cmd 中实现你想要的功能可能会稍微复杂一些。

$x = gci C:\yourpath | % { gi $_.FullName | rni -newname ($_ -replace "Slide","bbrd") }

详细地:

  • 首先,它搜索目录内具有Get-ChildItem别名的所有文件gci
  • 然后它将循环遍历每个带有foreach-object别名的文件%
  • 然后它通过别名的fullname属性调用该项目get-itemgi
  • 然后该项目被传递到管道并通过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!"

相关内容