2014-02-26 64 views
2

我在PS腳本方面還很新,所以我所做的大部分工作都是從示例中入侵。我現在想要做的是在PDF目錄中搜索目錄中的所有文件夾,然後重命名它們,將祖父文件夾名稱添加到文件名中。例如:PowerShell - 將祖父母以外的文件夾名稱添加到文件名

C:\出口\ 123個\票據\ abc.pdf將被重命名爲C:\出口\ 123個\票據\ 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

我覺得你只是想在重命名,項目'$ grandparent',不'$ _ $ grandparent'這是一個雙。將試圖訪問該項目的'123'屬性的間接性。 – Duncan

+0

那個部分也炸了 - 就像我說的,我是一個noob ...結果工作是:'Get-ChildItem'c:\ export \'-Recurse * .pdf | ForEach-Object {parent} = $ _父母 $ GrandParent = $ _。fullname | Split-Path -Parent | Split-Path -Parent | Split-Path -Leaf Rename-Item -path $ _。Fullname -newname「$ GrandParent $ _」。 }' – BillT

回答

2

這是否更好?

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

您需要兩次分裂父路徑,然後分裂葉關閉的,要得到公正的祖父母文件夾名稱不帶路徑的其餘部分。

+0

正是我需要的!祝賀你! – BillT

3

在PowerShell的V3和更新,您可以使用該項目的Parent屬性:

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