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

3

我在PS脚本方面还很新,所以我大部分的操作都是从示例中拼凑出来的。现在我想做的是在一个目录中搜索所有文件夹中的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”参数处出现错误,我尝试过删除该参数但没有起作用。我尝试复制代码以添加父文件夹到文件名,但似乎无法同时找到祖父文件夹名称并将其添加到文件中。

我认为你只是想在Rename-Item中使用$grandparent,而不是$_.$grandparent。后者是双重间接引用,会尝试访问项目的'123'属性。 - Duncan
那部分也出了问题 - 就像我说的,我是个新手... 最终起作用的是:Get-ChildItem 'c:\export\' -Recurse *.pdf | ForEach-Object { $parent = $_.Parent $GrandParent = $_.fullname | Split-Path -Parent | Split-Path -Parent | Split-Path -Leaf Rename-Item -path $_.Fullname -newname "$GrandParent $_." } - BillT
2个回答

3

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

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

2

这个有更好的效果吗?

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

您需要将父路径分割两次,然后从中分离出叶子以仅获取祖父文件夹名称而无需其余路径。


正是我所需要的!向你干杯! - BillT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接