基于每个文件夹重命名具有序列号的文件

时间:2018-02-28 22:19:21

标签: 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
image_4.jpg
image_5.jpg
image_6.jpg

...

我需要的是在每个文件夹结束时停止数字计数,重命名从下一个文件夹中的数字1开始。

感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用其键是文件的哈希表'用于维护每个目录序列号的相应父目录路径:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [R,L]
</IfModule>

如果对哈希表的关注变得过大,您可以在Get-ChildItem -File -Recurse -Include *.* | ForEach-Object { $ht = @{} } { $nextNum = ++$ht[$_.DirectoryName] Rename-Item $_.fullname "image_$nextNum.jpg" -WhatIf } 行之前插入以下语句,这样可以确保只保留1个条目:
$nextNum = ...

请注意,if (-not $ht[$_.DirectoryName]) { $ht.Clear() }利用哈希表条目是按需创建的,具有++$ht[$_.DirectoryName]值,并将$null应用于++ L -value结果为$null

答案 1 :(得分: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++
}