从文件夹中移动和重命名特定文件,并为每个文件夹连续命名
Moving and renaming specific files from folders and naming them consecutively per folder
我需要对许多文件夹(都在同一目录中)进行排序,以移动所有 JPG 并将其重命名为 "parentfolder" +“#”,其中 "parentfolder" 是父文件夹名称,“ #" 是各自文件夹中每组文件的连续标签。
例如文件夹.\Input\MainID1是a.jpg,b.jpg,c.jpg 和其他一些文件类型。
在另一个文件夹中 .\Input\MainID2 也是 a.jpg, b.jpg, c.jpg 和一些其他文件类型。
期望的输出是将所有 jps 保存在一个重命名为的文件夹中:
文件路径 新文件名
MainID1\a.jpg MainID1_1
MainID1\b.jpg MainID1_2
MainID1\c.jpg MainID1_3
然后在查看下一个文件夹时重置循环以允许:
文件路径 新文件名
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}
输出:
主要编号 1 1
主要编号 1 2
主要编号 1 3
主要编号 1 4
主 ID 10 5
主 ID 10 6
主 ID 10 7
主 ID 100 8
主 ID 101 9
主 ID 102 10
主 ID 102 11
主 ID 102 12
主 ID 102 13
主 ID 102 14
主 ID 102 15
主 ID 102 16
主 ID 102 17
主 ID 102 18
主 ID 102 19
主 ID 102 20
主 ID 102 21
主 ID 102 22
主 ID 103 23
主 ID 104 24
主 ID 104 25
主 ID 105 26
主 ID 105 27
主 ID 106 28
主 ID 107 29
主 ID 109 30
等等
一种方法是创建一个变量来存储上一个文件的目录名称(例如$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
}
您可以按 directoryName 分组,并像这样在每个文件组上循环:
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}
}
备注:
- 在 Get-childitem 中使用 -File(否则如果包含 jpg 目录的目录是 incude)
- 如果您希望文件名以 001、002、003 结尾(保持相同的数字格式),请修改我的代码并将“{0}{1}_{2}”替换为“{0}{1}” _{2:d3}"
- 当然,如果您真的想应用此重命名命令,请删除假设
我需要对许多文件夹(都在同一目录中)进行排序,以移动所有 JPG 并将其重命名为 "parentfolder" +“#”,其中 "parentfolder" 是父文件夹名称,“ #" 是各自文件夹中每组文件的连续标签。
例如文件夹.\Input\MainID1是a.jpg,b.jpg,c.jpg 和其他一些文件类型。 在另一个文件夹中 .\Input\MainID2 也是 a.jpg, b.jpg, c.jpg 和一些其他文件类型。
期望的输出是将所有 jps 保存在一个重命名为的文件夹中:
文件路径 新文件名 MainID1\a.jpg MainID1_1 MainID1\b.jpg MainID1_2 MainID1\c.jpg MainID1_3
然后在查看下一个文件夹时重置循环以允许:
文件路径 新文件名 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}
输出:
主要编号 1 1 主要编号 1 2 主要编号 1 3 主要编号 1 4 主 ID 10 5 主 ID 10 6 主 ID 10 7 主 ID 100 8 主 ID 101 9 主 ID 102 10 主 ID 102 11 主 ID 102 12 主 ID 102 13 主 ID 102 14 主 ID 102 15 主 ID 102 16 主 ID 102 17 主 ID 102 18 主 ID 102 19 主 ID 102 20 主 ID 102 21 主 ID 102 22 主 ID 103 23 主 ID 104 24 主 ID 104 25 主 ID 105 26 主 ID 105 27 主 ID 106 28 主 ID 107 29 主 ID 109 30 等等
一种方法是创建一个变量来存储上一个文件的目录名称(例如$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
}
您可以按 directoryName 分组,并像这样在每个文件组上循环:
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}
}
备注:
- 在 Get-childitem 中使用 -File(否则如果包含 jpg 目录的目录是 incude)
- 如果您希望文件名以 001、002、003 结尾(保持相同的数字格式),请修改我的代码并将“{0}{1}_{2}”替换为“{0}{1}” _{2:d3}"
- 当然,如果您真的想应用此重命名命令,请删除假设