我需要对许多文件夹(全部在同一目录中)进行排序,以将所有JPG移动并重命名为“parentfolder”+“#”,其中“parentfolder”是父文件夹名称,“#”是连续标签对于各自文件夹中的每组文件。
例如,在文件夹。\ Input \ MainID1 中 a.jpg,b.jpg,c.jpg 以及其他一些文件类型。 在另一个文件夹。\ Input \ MainID2 也是 a.jpg,b.jpg,c.jpg 以及其他一些文件类型。
所需的输出是将所有jps保存在重命名为:
的单个文件夹中File Path New File name MainID1\a.jpg MainID1_1 MainID1\b.jpg MainID1_2 MainID1\c.jpg MainID1_3
然后在查看下一个文件夹时重置循环以允许:
File Path New File name MainID2\a.jpg MainID2_1 MainID2\b.jpg MainID2_2 MainID2\c.jpg MainID2_3
我无法找到重新启动每个文件夹循环的方法。目前,我的循环正在迭代整个目录的.jpg文件。
C:\Users\Rango\Renaming\Input> Get-ChildItem -Recurse -Filter *.jpg |
ForEach-Object {$c = 1}
{Write-Host $_.Directory.Name $c; $c++}
{ $c = 1}
输出:
Main ID 1 1 Main ID 1 2 Main ID 1 3 Main ID 1 4 Main ID 10 5 Main ID 10 6 Main ID 10 7 Main Id 100 8 Main Id 101 9 Main Id 102 10 Main Id 102 11 Main Id 102 12 Main Id 102 13 Main Id 102 14 Main Id 102 15 Main Id 102 16 Main Id 102 17 Main Id 102 18 Main Id 102 19 Main Id 102 20 Main Id 102 21 Main Id 102 22 Main Id 103 23 Main Id 104 24 Main Id 104 25 Main Id 105 26 Main Id 105 27 Main Id 106 28 Main Id 107 29 Main Id 109 30 etc.
答案 0 :(得分:0)
执行此操作的一种方法是创建一个变量来存储上一个文件的目录名称(例如$oldName
),并在此更改时重置$c
:
Get-ChildItem -Recurse -Filter *.jpg |
ForEach-Object {
if($_.Directory.Name -ne $oldName){$c = 1}
Write-Host $_.Directory.Name $c; $c++
$oldName = $_.Directory.Name
}
答案 1 :(得分:0)
您可以按目录名分组并循环每个文件组,如下所示:
Get-ChildItem "c:\temp" -Recurse -File -Filter *.jpg | group DirectoryName |%{
$Dir=$_
$Cpt=1
$_.Group | %{rename-item $_.FullName -NewName ("{0}\{1}_{2}" -f $Dir.Name, (Split-Path $Dir.Name -Leaf), $Cpt++) -WhatIf}
}
注意: