我仍然是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'参数中抛出错误,我尝试删除该参数,但这不起作用。我试图复制将父文件夹添加到文件名的代码,但我似乎无法找到祖父文件夹名称并将名称添加到文件一起工作。
答案 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
您需要将父路径拆分两次,然后将其分离,以获得祖父文件夹名称而不使用其余路径。