我需要在很多文件夹中对文件进行编号。
我使用了以下内容:
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开始。
感谢。
答案 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++
}