我試圖做到以下幾點:如何在PowerShell中批量重命名文件?
Rename-Item c:\misc\*.xml *.tmp
我基本上要到一個目錄內改變每一個文件的擴展名來.tmp
而不是.xml
。我似乎無法找到在PowerShell中執行此操作的簡單方法。
我試圖做到以下幾點:如何在PowerShell中批量重命名文件?
Rename-Item c:\misc\*.xml *.tmp
我基本上要到一個目錄內改變每一個文件的擴展名來.tmp
而不是.xml
。我似乎無法找到在PowerShell中執行此操作的簡單方法。
Rename_Item的幫助文檔中來自實施例4衍生自具有命令檢索到:
get-help Rename-Item -examples
實施例:
Get-ChildItem *.xml | Rename-Item -NewName { $_.Name -replace '\.xml','.tmp' }
注意在替換命令的幫助文檔中的解釋逸出反斜線由於它使用正則表達式來查找要替換的文本。
當您在所需的目錄中時,此功能也可以正常工作。
Dir | Rename-Item –NewName { $_.name –replace "old","new" }
dir -Recurse | where-object -FilterScript {$_.Extension -eq ".xml"} | Rename-Item -NewName {[System.IO.Path]::GetFileNameWithoutExtension($_.fullname) + ".tmp"}
使用-WhatIf評估結果第一
Upvote是因爲'-WhatIf'標誌。 – Lucubrator
現有的答案建議-replace
操作,但如果該文件名爲a.xml.xml
?兩個.xml
子串將被替換,最終結果將爲a.tmp.tmp
。幸運的是,對於這樣的.NET方法:
Dir *.xml | rename-item -newname { [io.path]::ChangeExtension($_.name, ".tmp") }
(Manish Kumar接近與GetFileNameWithoutExtension
但是這是更優雅和可能有點更高效,而不是它在這種情況下過於事項)
這裏的另一個將工作的變種。
dir *.xml | Rename-Item -NewName {$_.BaseName + ".tmp"}
$_.BaseName
將執行沒有(最後)擴展名的「基本」名稱。
使用別名縮短的版本是:
ls *.xml | ren -new {$_.BaseName + ".tmp"}
甚至更容易 - 記住,替換搜索字符串是一個正則表達式,
dir *.xml | rename-item -newname {$_.name -replace "xml$","tmp"}
的「$」代表最終OF-字符串,所以字符「xml」必須是文件名的最後三個字符。
謝謝,我一定錯過了這個。 –
如果您爲重命名指定-WhatIf參數,則它顯示操作的輸出,而不實際重命名任何內容,這非常有用 –
這實際上是文檔IMO中的一個不好的示例。這段代碼不等同於'ren * .xml * .tmp'(提示:'a.xml.xml')。你想'System.IO.Path.ChangeExtension':http://stackoverflow.com/a/36241702/67824。 –