2011-12-15 16 views
5

में सभी निर्देशकों और फ़ाइलों के नामों को प्रतिस्थापित करें, मैं सभी सबफ़ोल्डर और फ़ाइलों के नामों में सभी स्पेस वर्णों को "_" में बदलना चाहता हूं। दुर्भाग्य से जब मैं टाइप करें:पीएस

Get-ChildItem -recurse -name | ForEach-Object { Rename-Item $_ $_.replace(" ","_") } 

त्रुटि संदेश:

Rename-Item : Source and destination path must be different. At line:1 char:60 + Get-ChildItem -recurse -name | ForEach-Object { Rename-Item <<<< $_ $.replace(" ","") } + CategoryInfo : WriteError: (PATH_HERE) [Rename-Item], IOException + FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand

मैं कैसे इस छोटे से कोड में सुधार करना चाहिए?

उत्तर

5

यहां मुद्दा यह है कि यदि फ़ाइल नाम में कोई स्थान नहीं है तो नाम बदल नहीं जाता है। यह Rename-Item द्वारा समर्थित नहीं है। आप Move-Item बजाय का उपयोग करना चाहिए:

Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace(" ", "_") } 

साथ ही, अपने जवाब में आप $_.replace(...) में अंडरस्कोर याद प्लस आप जहां कोई रिक्त स्ट्रिंग के साथ रिक्त स्थान की जगह। मेरे जवाब में यह शामिल है।

+1

मूव-आइटम: प्रक्रिया फ़ाइल तक नहीं पहुंच सकती क्योंकि यह किसी अन्य प्रक्रिया द्वारा उपयोग की जा रही है। लाइन पर: 1 char: 58 + Get-ChildItem -recurse -name | ForEach-Object {Move-Item <<<< $ _ $ _। प्रतिस्थापित करें ("", "_")} + श्रेणीइंफो: लिखें त्रुटि: – matandked

5

नाम स्विच का उपयोग न करें, यह केवल वस्तुओं के नाम आउटपुट करता है, न कि उनके पूर्ण पथ। इसे आज़माएं:

Get-ChildItem -Recurse | ` 
    Where-Object {$_.Name -match ' '} | ` 
    Rename-Item -NewName { $_.Name -replace ' ','_' } 
+0

अच्छा। अतिरिक्त फ़िल्टर के रूप में कहां ऑब्जेक्ट {$ _। विशेषताएँ-notmatch 'निर्देशिका'} शामिल करना चाहते हैं। जब आप इसके माध्यम से पुनरावृत्त कर रहे हों तो आप निर्देशिका का नाम बदल नहीं सकते। –

+1

@ माइकलब्लैकबर्न एक और चाल है पूर्ण संग्रह द्वारा अवरोही क्रम में संग्रह को सॉर्ट करना। यह स्क्रिप्ट को डायरेक्टरी को संशोधित करने से पहले निर्देशिका में सभी बच्चे वस्तुओं को संभालने के लिए मजबूर करता है। –

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