使用powershell使用foldername和排除项重命名文件

时间:2017-07-17 13:57:04

标签: powershell pdf subdirectory batch-rename

有许多主题具有相同的标题,但尝试/修补它们以满足我的需要迄今为止都没有成功。

这接近我想要实现的目标,但排除不起作用,它重命名所有子文件夹中的PDF文件而不是唯一剩余的文件夹“文件夹3”。在这里,我尝试了其他主题的解决方案,到目前为止,这些主题对我来说都没有用。

[string[]]$Path = @('C:\test\')
[string[]]$Excludes = @('*folder 1*', '*Folder 2*')
Get-ChildItem $Path -Filter *.pdf -Recurse | ?{$_.DirectoryName -notlike $Excludes } | Rename-Item -NewName { $_.Directory.Parent.BaseName + '-' + $_.Name }

我想要实现的是使用第一个子文件夹的名称重命名子文件夹的子文件夹中的所有PDF文件,请参阅下面的结构。

C:\test\2704814
\Folder 1
|- file1.pdf
|- file2.pdf
\Folder 2
|- file1.pdf
|- file2.pdf
\Folder 3
|- file1.pdf
|- file2.pdf
C:\test\2704815
\Folder 1
|- file1.pdf
|- file2.pdf
\Folder 2
|- file1.pdf
|- file2.pdf
\Folder 3
|- file1.pdf
|- file2.pdf

要得到这个:

C:\test\2704814\Folder 3\2704814-file1.pdf

C:\test\2704814\Folder 3\2704814-file2.pdf

1 个答案:

答案 0 :(得分:2)

EDIT为firstlevel子文件夹插入另一个$ ExcludeL1

最安全的方法是一步一步地做到这一点:

  • 迭代test的子文件夹,将名称存储在var
  • 迭代子子文件夹并排除不需要的内容(-notin要求排除为文字)
  • 在那里迭代pdf并检查它们是否已经没有存储文件夹名称的前缀。
  • 最后重命名。
$Base = 'C:\test\'
$ExcludeL1 = @('folder 1', 'Folder 2')
$ExcludeL2 = @('Othername')

Get-ChildITem -Path $Base -Directory | Where {$_.Name -notin $ExcludeL1}|ForEach {
  $PreFix = $_.Name
  Get-ChildItem -Path $_.FullName -Directory | 
    Where-Object {$_.Name -notin $ExcludeL2 } |
      ForEach-Object {
        Get-ChildItem $_.FullName -Filter *.PDF |
          Where-Object {$_.BaseName -notmatch $PreFix}|
            Rename-Item -NewName { "$PreFix-$($_.Name)"} -WhatIf
      }
}

如果您的输出看起来不错,请删除最后一行中的-WhatIf

我的ramdrive上的示例重新打印A:

> tree /F
A:.
 └───test
    ├───2704814
    │   ├───Folder 1
    │   │       file1.pdf
    │   │       file2.pdf
    │   ├───Folder 2
    │   │       file1.pdf
    │   │       file2.pdf
    │   └───Folder 3
    │           2704814-file1.pdf
    │           2704814-file2.pdf
    └───2704815
        ├───Folder 1
        │       file1.pdf
        │       file2.pdf
        ├───Folder 2
        │       file1.pdf
        │       file2.pdf
        └───Folder 3
                2704815-file1.pdf
                2704815-file2.pdf