2012-11-14 12 views
32

मैं निम्न कार्य करने की कोशिश कर रहा हूँ:मैं PowerShell में फ़ाइलों का नाम बदलने के लिए कैसे थोक कर सकता हूं?

Rename-Item c:\misc\*.xml *.tmp 

मैं मूल रूप से .tmp बजाय .xml के लिए एक निर्देशिका के भीतर हर फाइलों पर विस्तार बदलना चाहते हैं। मुझे PowerShell में ऐसा करने का सीधा आगे नहीं मिल रहा है।

उत्तर

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

'-WhatIf' ध्वज की वजह से उपरोक्त। – Lucubrator

8

मौजूदा जवाब -replace ऑपरेटर सुझाव है, लेकिन फाइल a.xml.xml कहा जाता है क्या है? .xml सबस्ट्रिंग्स को प्रतिस्थापित किया जाएगा और अंतिम परिणाम a.tmp.tmp होगा। सौभाग्य से, इस के लिए एक .NET विधि है:

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

(Manish KumarGetFileNameWithoutExtension के साथ निकट था, लेकिन इस और अधिक सुरुचिपूर्ण शायद थोड़ा अधिक कुशल है और, नहीं है कि यह बहुत ज्यादा इस मामले में मायने रखती है)

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"} 

"$" का प्रतिनिधित्व करता है अंत के- स्ट्रिंग, इसलिए वर्ण "xml" फ़ाइल नाम के अंतिम तीन वर्ण होना चाहिए।

संबंधित मुद्दे

 संबंधित मुद्दे