Powershell - 使用填充零批量重命名多个文件

Powershell - 使用填充零批量重命名多个文件

我正在尝试使用 PowerShell 批量重命名同一文件夹内的多个图像。

它在工作电脑上,所以我无法安装任何外部程序,并且如果我在文件夹内使用 shift + 右键单击​​功能(“在此处打开 PowerShell 窗口”命令),我只能将 PowerShell 指向该文件夹(该工作电脑上有一堆严格的管理规则)。

我一直在尝试使用这个命令:

dir *.jpg | ForEach-Object -begin { $count=1 } -process { rename-item $_ -NewName "cat000$count.jpg"; $count++ }

但这并不是我所寻找的。

我希望批量重命名多个文件,使它们看起来像下面这样:

Cat0001 Cat0002 Cat0010

因此,命令应该识别何时翻转到 10 位,并且仅添加两个零而不是三个零。

这可能吗?

答案1

你会使用-f格式运算符(描述如何操作:-f Format 运算符):

$fileExtension='jpg'
Get-ChildItem -Filter "*.$fileExtension" |
    Where-Object { -not ($_.BaseName  -match "^cat\d{4}$") } |
    ForEach-Object -Begin { $count=1 } -Process {
        $newName = "cat{0:d4}.$fileExtension" -f $count
        $count++
        #  optional: what-if the $newName file already exists?
        While (Test-Path -Path $newName) {
            $newName = "cat{0:d4}.$fileExtension" -f $count
            $count++
        }
        Write-Host Rename-Item -NewName $newName -Path $_.FullName
     }

这里

  • Where-Object {…}从处理中排除已重命名的文件(请注意,"^cat\d{4}$"如果文件数量超过 9999 个,则正则表达式可能不够用,
  • While (Test-Path -Path $newName) {…}循环防止不必要的覆盖文件(例外重命名项:当文件已存在时无法创建文件。), 和
  • Write-Host …仅用于调试目的(我不喜欢这个-WhatIf参数,因为它太冗长)。

相关内容