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您可以访问不带括号的变量的属性,如果您按照答案构建字符串,这有时会导致问题。因为变量中存储了整数,所以在这种情况下不应该是问题。但是我发现我的方法最可预测、最可靠,而不管变量的值如何。