Powershell 根据每个文件夹重命名具有序列号的文件
我需要给很多文件夹中的文件编号 我使用了以下方法:Powershell 根据每个文件夹重命名具有序列号的文件,powershell,sequence,directory,Powershell,Sequence,Directory,我需要给很多文件夹中的文件编号 我使用了以下方法: Get-ChildItem -Recurse -Include *.* | ForEach-Object -Begin { $count = 1 } -Process { Rename-Item $_ -NewName "image_$count.jpg"; $count++ } 它可以工作,但问题是文件夹之间的编号仍在继续 例如: \folder1 image_1.jpg image_2.jpg image_3.jpg \folder2
Get-ChildItem -Recurse -Include *.* | ForEach-Object -Begin { $count = 1 } -Process { Rename-Item $_ -NewName "image_$count.jpg"; $count++ }
它可以工作,但问题是文件夹之间的编号仍在继续
例如:
\folder1
image_1.jpg
image_2.jpg
image_3.jpg
\folder2
image_4.jpg
image_5.jpg
image_6.jpg
...
我需要的是在每个文件夹结束并且重命名从下一个文件夹中的数字1开始时停止计数
谢谢。编辑:
在所有的评论之后,这里有一个更好的答案
$directoryName = $null
$count = 1
Get-ChildItem -File -Recurse -Include *.* |
ForEach-Object {
if ($directoryName -eq $null -or $directoryName -ne $_.DirectoryName) {
$directoryName = $_.DirectoryName
$count = 1
}
Rename-Item $_.fullname "image_$count.jpg" -WhatIf
$count++
}
您可以使用哈希表(其键是文件各自的父目录路径)来维护每个目录的序列号:
Get-ChildItem -File -Recurse -Include *.* |
ForEach-Object { $ht = @{} } {
$nextNum = ++$ht[$_.DirectoryName]
Rename-Item $_.fullname "image_$nextNum.jpg" -WhatIf
}
如果担心哈希表变得太大,可以在$nextNum=…
行之前插入以下语句,以确保只维护一个条目:if(-not$ht[$\.DirectoryName]){$ht.Clear()}
请注意,
+$ht[$\.DirectoryName]
利用了这样一个事实,即哈希表条目是根据需要创建的,具有$null
值,并且将+
应用于$null
L值会导致进程块中出现1
,如果($\.pscontainer){$count=1}@如果有更多嵌套的文件夹,这可能不起作用。但我遇到了一个错误:无法在“imageABC.jpg”处重命名项,因为项不存在。所有文件都会发生这种情况。文件存在,但重命名不起作用。行:4个字符:61+ForEach对象-开始{$count=1}-进程{rename Item$\可能需要-NewName(“image”+$count+“.jpg”)@Heedfullcrayon您可以访问不带括号的变量的属性,如果您按照答案构建字符串,这有时会导致问题。因为变量中存储了整数,所以在这种情况下不应该是问题。但是我发现我的方法最可预测、最可靠,而不管变量的值如何。