2016-02-19 114 views
0

我試圖使用PowerShell ISE幫助我做到以下幾點:Powershell ISE - 如何複製許多文件並同時對其進行重命名?

  • 執行許多文件的搜索(用一個擴展名爲* props.tmpl)特定的文件夾下,幷包括所有子目錄。
  • 找到後,我想將該文件複製到當前位置,但是擴展名爲* .tmpl2(我真正想要的是跳過此步驟並將* props.tmpl複製到名爲* props的文件中)
  • 然後重命名所有* .tmpl2文件並完全刪除tmpl2,只留下* .props擴展名。

理想情況下,我想要的是將現有文件複製到具有新名稱的同一目錄中。看起來,我在Powershell ISE上運行的所有搜索都沒有提供我需要的正確信息(或者我沒有找到正確的方法來做到這一點 - 嘗試'powershell ise複製許多新名稱的文件'沒有幫助。

我不得不更換一塊下來的工作,但我不再想消除原有的TMPL文件(它們是模板,所以我想在以後回顧他們的原創內容)。

我在做什麼,以取代他們的是這樣的:

Get-ChildItem -Filter "*props.tmpl" -Recurse | 
    Rename-Item -NewName { $_.name -replace '.tmpl',''} 

這不是完全刪除原始文件的偉大工程等

我開始嘗試拼湊一些東西在一起,但我不知道如何正確命名副本,並停止在這一點上只有一個錯誤(這是一個嘗試跳過額外的副本,只是簡單地重命名副本加入的「* .tmpl2」)的額外步驟:

# Get all *props.tmpl files 
Get-ChildItem -Filter "*props.tmpl" -Recurse | 

# Iterate through each found file 
ForEach-Object { 
    Copy-Item $_.name | 
     Rename-Item -NewName { $_.name -replace '.props.tmpl','.props' } 
} 

任何幫助將是非常讚賞(沒有太大的Powershell的傢伙,但我努力學習,因爲PowerShell的往往是多了幾分活力然後是oldschool批處理腳本)。

在此先感謝


從@ssennett

這是我的最終版本每幫助這個腳本的最終版本:

# Get all *props.tmpl files 
Get-ChildItem -Filter "*props.tmpl" -Recurse | 

# Iterate through each found file and copy it to non-template form in same location 
ForEach-Object { 
    Copy-Item $_.FullName ($_.Name -replace '.tmpl','') 
} 

回答

1

從你的回答是不會太遠!這正是如何處理複製項目。

如果沒有指定Destination,Copy-Item將有效地嘗試並將文件複製到自身。您可以使用-Destination參數處理重命名,而不是將其重命名爲Rename-Item,如下所示。

$files = Get-ChildItem -Filter "*props.tmpl" -Recurse 
$files | % { Copy-Item -Path $_.FullName -Destination ($_.Name -replace 'props.tmpl','.props') } 

這將一個名爲RandomFileprops.tmpl文件複製到另一個文件RandomFile.props。如果要刪除原始文件,可以使用帶有相同參數的Move-Item cmdlet,該參數有效地重命名原始文件。

+0

剛剛意識到,我應該澄清一下:管道後的%是「Foreach」的別名。 – ssennett

+0

非常感謝@ssennett。這正是我所需要的 – Steve

+0

我只注意到這不是遞歸地處理子目錄中的文件(雖然它會拾取文件名稱,但它並不會在物理上改變名稱)。你知道什麼會打破'-Recurse'國旗@ssennett? – Steve

相關問題