我正在尝试为最终用户更轻松地进行批处理文件命名。在拍摄我们的位置时,我们有时可能只有1张照片或500张,具体取决于位置的大小。下面的代码可以很好地根据目录中的文件大小重命名我们的照片:
$prefix = "[SomePrefix]"
$files = Get-ChildItem
$id = 1
$files | foreach { Rename-Item -Path $_.fullname -NewName ( $prefix + ((($id++).tostring()).padleft(($files.count.tostring()).length) -replace ' ','0' ) + $_.extension) }
代码根据目录中的文件数填充带有前导零的照片文件名,即如果总量少于9个文件则为1,2,3,4,5; 01,02,03,04,05如果文件总量在10到99之间; 001,002,003,004,005,如果文件总量在100到999之间。
我需要修改此代码,以便它始终保留3个前导零001,002,003,004,005,无论目录中的文件数量是多少。但是,我确实需要代码来递归现有目录,这样我就可以根据数字(0-9; 10-99; 100-999)和运行单独的代码行来消除用户必须将照片组织到不同文件夹中的用户。每。
示例照片文件名称约定:PREFIX_001.jpg
有人能告诉我如何修改上述代码以满足我的需求吗?
答案 0 :(得分:0)
我建议小心方括号,因为它可以被解释为各种各样的通配符。
PNR Action Code
-----+-------------
1 | Book
1 | Exchange
1 | Cancel
4 | Book
4 | Cancel
此解决方案将根据$Prefix = '[SomePrefix]'
$Path = '.'
$Folders = Get-ChildItem -LiteralPath $Path -Directory -Recurse
ForEach ($Folder in $Folders)
{
$Counter = 0
Get-ChildItem $Folder -File |
ForEach-Object {
Rename-Item $_.FullName -NewName "${Prefix}_$($Counter.ToString('000'))$($_.Extension)"
$Counter++
}
}
格式中$Path
的定义递归重命名目录中的所有文件