使用PowerShell重命名目录中每个文件夹中的每个文件
问题描述:
我有一个大约60个.jpg图像文件夹的目录,每个文件夹大约10张图片。问题在于,在这些目录中的每一个目录中图像的顺序都是正确的,但是名称是重击的,一些目录从000.jpg
开始,其他目录在002.jpg
。我想要做的是制作一个脚本,它将重新命名这些目录中的文件,从001.jpg
开始。使用PowerShell重命名目录中每个文件夹中的每个文件
我有一点成功。以下是在每个目录中执行的代码。
$i = 1
Get-ChildItem *.jpg | %{Rename-Item $_ -NewName ('{0:D3}.jpg' -f $i++)}
所以我试图让它在根目录下工作,而不是我执行它60次,每次我必须这样做。到目前为止,我失败了。我试图从各个部分分割它,但现在我甚至不明白我的代码应该做什么。
$dir = Get-ChildItem | ?{ $_.PSIsContainer }
$dir | Foreach-Object{
$i = 1
Get-ChildItem *.jpg | %{Rename-Item $_ -NewName ('{0:D3}.jpg' -f $i++)}}
我跟你说实话,我不太了解PowerShell。这就是为什么我要求您帮助修复代码并使其更好地工作。
答
试试这个:
Set-Location 'C:\path\to\rootdir'
Get-ChildItem -Directory -Recurse | % {
Get-ChildItem -Path $_.FullName -Filter *.jpg |
sort Name |
ForEach-Object -Begin { $i = 1 } -Process {
Rename-Item $_.FullName -NewName ('{0:D3}.jpg' -f $i++)
}
}
-
Get-ChildItem -Directory -Recurse
得到所有子子-...-子目录。 (-Path .\*\*.jpg
只能获得子版本。) -
Get-ChildItem -Path <path> -Filter *.jpg
获取<path>
目录下的所有jpg文件。 -
sort Name
按文件名升序排列文件。sort
是Sort-Object
cmdlet的别名。 - 如果您要测试
Rename-Item
,请附加-WhatIf
切换参数。欲了解更多信息,请键入:Get-Help Rename-Item -Parameter WhatIf
或Get-Help about_CommonParameters
- 请注意,
$i = 1
,而不是$i = 0
,因为++
是post-incrementing operator。 -
% {...}
与% -Process {...}
相同。%
是ForEach-Object
cmdlet的别名。 - 流水线(
|
)允许换行。
您需要进入每个文件夹,进行重命名,然后再次返回。 '$ rootDir = Get-Location'在脚本的顶部,然后对于每个循环'set-location $ _'执行Get-ChildItem重新编号然后'set-location $ rootDir'返回原点。 – TessellatingHeckler
您可以使用'Group-Object'如'Get-ChildItem。\ * \ *。jpg |组目录| ForEach-Object -Begin {$ i = 0} -Process {$ _。Group | %{Rename-Item $ _ -NewName('{0:D3} .jpg'-f $ i ++)}}}'......我很确定这样做会达到你想要的效果。 – TheMadTechnician