2012-11-14 162 views

回答

43

Rename_Item的幫助文檔中來自實施例4衍生自具有命令檢索到:

get-help Rename-Item -examples 

實施例:

Get-ChildItem *.xml | Rename-Item -NewName { $_.Name -replace '\.xml','.tmp' } 

注意在替換命令的幫助文檔中的解釋逸出反斜線由於它使用正則表達式來查找要替換的文本。

+0

謝謝,我一定錯過了這個。 –

+2

如果您爲重命名指定-WhatIf參數,則它顯示操作的輸出,而不實際重命名任何內容,這非常有用 –

+0

這實際上是文檔IMO中的一個不好的示例。這段代碼不等同於'ren * .xml * .tmp'(提示:'a.xml.xml')。你想'System.IO.Path.ChangeExtension':http://stackoverflow.com/a/36241702/67824。 –

15

當您在所需的目錄中時,此功能也可以正常工作。

Dir | Rename-Item –NewName { $_.name –replace "old","new" } 
1
dir -Recurse | where-object -FilterScript {$_.Extension -eq ".xml"} | Rename-Item -NewName {[System.IO.Path]::GetFileNameWithoutExtension($_.fullname) + ".tmp"} 

使用-WhatIf評估結果第一

+0

Upvote是因爲'-WhatIf'標誌。 – Lucubrator

8

現有的答案建議-replace操作,但如果該文件名爲a.xml.xml?兩個.xml子串將被替換,最終結果將爲a.tmp.tmp。幸運的是,對於這樣的.NET方法:

Dir *.xml | rename-item -newname { [io.path]::ChangeExtension($_.name, ".tmp") } 

Manish Kumar接近與GetFileNameWithoutExtension但是這是更優雅和可能有點更高效,而不是它在這種情況下過於事項)

2

這裏的另一個將工作的變種。

dir *.xml | Rename-Item -NewName {$_.BaseName + ".tmp"} 

$_.BaseName將執行沒有(最後)擴展名的「基本」名稱。

0

使用別名縮短的版本是:

ls *.xml | ren -new {$_.BaseName + ".tmp"} 
1

甚至更​​容易 - 記住,替換搜索字符串是一個正則表達式,

dir *.xml | rename-item -newname {$_.name -replace "xml$","tmp"} 

的「$」代表最終OF-字符串,所以字符「xml」必須是文件名的最後三個字符。