PowerShell - 将祖父文件夹名称添加到文件名

时间:2014-02-26 21:11:28

标签: powershell scripting path file-rename

我仍然是PS Scripting的新手,因此我所做的大部分工作都是从示例中攻击出来的。我现在要做的是搜索目录中的所有文件夹中的PDF,然后重命名它们,将祖父母文件夹名称添加到文件名中。例如:

c:\ export \ 123 \ notes \ abc.pdf将重命名为c:\ export \ 123 \ notes \ 123_abc.pdf

脚本的其余部分工作正常,使用GhostScript将它们转换为TIF并将它们移动到另一台服务器。问题是所有PDF的命名都相似,但'123'文件夹对于文档来说是唯一的。这就是我设法凑到一起的东西:

Get-ChildItem 'c:\export\' -Recurse *.pdf |
  ForEach-Object {
  $parent = $_.Parent
  $grandparent = $parent.Parent

  Rename-Item -NewName {$_.$grandparent + "_" + $_.Name}
  }

该脚本在'-NewName'参数中抛出错误,我尝试删除该参数,但这不起作用。我试图复制将父文件夹添加到文件名的代码,但我似乎无法找到祖父文件夹名称并将名称添加到文件一起工作。

2 个答案:

答案 0 :(得分:3)

在PowerShell v3及更新版本上,您可以使用项目的Parent属性:

Get-ChildItem 'c:\export\' -Recurse *.pdf | % {
  Rename-Item -NewName {$_.Parent.Parent.Name + "_" + $_.Name}
}

答案 1 :(得分:2)

这会更好吗?

$GrandParent = 
 $_.fullname | Split-Path -Parent | Split-Path -Parent | Split-Path -Leaf

您需要将父路径拆分两次,然后将其分离,以获得祖父文件夹名称而不使用其余路径。