1

我需要对许多文件夹(都在同一个目录中)进行排序,以将所有 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}

输出:

主 ID 1 1
主 ID 1 2
主 ID 1 3
主 ID 1 4
主 ID 10 5
主 ID 10 6
主 ID 10 7
主 ID 100 8
主编号 101 9
主 ID 102 10
主要编号 102 11
主 ID 102 12
主编号 102 13
主要编号 102 14
主 ID 102 15
主 ID 102 16
主要编号 102 17
主要编号 102 18
主要编号 102 19
主要编号 102 20
主要编号 102 21
主要编号 102 22
主要编号 103 23
主要编号 104 24
主要编号 104 25
主要编号 105 26
主要编号 105 27
主要编号 106 28
主要编号 107 29
主要编号 109 30
等等
4

2 回答 2

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
}
于 2017-11-04T10:47:41.737 回答
0

您可以按 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}
}

笔记:

  1. 使用 -File 进入 Get-childitem (否则如果目录包含 jpg 目录是 incude )
  2. 如果您希望文件名以 001、002、003 结尾(保持相同的数字格式),请修改我的代码并将“{0}{1}_{2}”替换为“{0}{1}_{2:d3 }"
  3. 当然删除假设如果你真的想应用这个重命名命令
于 2017-11-04T11:21:34.127 回答