我正在尝试使用 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
参数,因为它太冗长)。