एक फ़ोल्डर में कई फ़ाइलों का नाम बदलें, एक उपसर्ग (विंडोज) जोड़ें


81

मैं एक फ़ोल्डर में फ़ाइलों का नाम बदलना चाहता हूं, नए नामों में फ़ोल्डर का नाम प्रीफ़िक्स करना। C:\house chores\सभी में फ़ाइलों का नाम दिया जाएगा house chores - $old_name

जवाबों:


146

विकल्प 1: Windows PowerShell का उपयोग करना

विंडो मेनू खोलें। टाइप करें: "पॉवरशेल" और 'विंडोज पॉवरशेल' कमांड विंडो खोलें।

इच्छित फ़ाइलों के साथ गोटो फोल्डर: उदाहरण के लिए cd "C: \ house chores" सूचना: पते में रिक्त स्थान शामिल होने पर "" उद्धरण शामिल होना चाहिए।

आप सभी फ़ाइलों को फ़ोल्डर में देखने के लिए 'dir' का उपयोग कर सकते हैं। 'का उपयोग कर निम्नानुसार कमांड के लिए 'dir' के आउटपुट को पाइपलाइन करेगा।

नोट: 'dir' 'Get-ChildItem' का एक उपनाम है। देखें: विकी: cmdlets । एक और कार्यक्षमता प्रदान कर सकता है। उदाहरण के लिए 'dir -recurse' सभी फ़ाइलों, फ़ोल्डरों और उप-फ़ोल्डरों को आउटपुट करता है।

क्या होगा अगर मैं केवल फ़ाइलों की एक सीमा चाहता हूं?

इसके बजाय 'dir |' मैं उपयोग कर सकता हूं:

dir | where-object -filterscript {($_.Name -ge 'DSC_20') -and ($_.Name -le 'DSC_31')} |

उपसर्ग के रूप में निर्देशिका नाम के साथ बैच-नाम बदलने के लिए:

dir | Rename-Item -NewName {$_.Directory.Name + " - " + $_.Name}

विकल्प 2: कमांड प्रॉम्प्ट का उपयोग करना

फ़ोल्डर में प्रेस शिफ्ट + राइट-क्लिक करें: 'यहाँ खुले कमांड-विंडो' का चयन करें

for %a in (*.*) do ren "%a" "prefix - %a"

यदि बहुत सारी फाइलें हैं, तो इससे पहले '@echo ऑफ' कमांड जोड़ना अच्छा होगा और अंत में एक 'इको ऑन' कमांड।


1
माइनर नाइटपिक: @इन @echo onकी आवश्यकता नहीं है। आप बस चले गए @echo off
IInspectable

9
विकल्प 2 (लापता को जोड़ने के बाद do) काम नहीं करता है - कुछ फ़ाइलों का नाम बदल दिए जाने के बाद, forउन्हें नए नाम के तहत पाता है, फिर से उपसर्ग जोड़ते हुए जब तक फ़ाइल नाम की लंबाई सीमा नहीं हो जाती है।
सर्गेई व्लासोव

2
विकल्प 2 का उपयोग करते समय मुझे ren was unexpected at this time.कोई विचार मिलता है क्यों?
नल सूचक

4
@billgates doउनके उत्तर में यह शब्द गायब है। यह होना चाहिएfor %a in (.) do ren "%a" "prefix - %a"
क्रिस्टियान Westerbeek

2
@SergeyVlasov दोनों विकल्पों में होता है। इससे बचने का एक ही तरीका है कि इसका नाम बदलकर मूल से ऊपर रखा जाए। या शायद नाम बदलने के बाद इसे एक अलग फ़ोल्डर में ले जाएं।
डेविड स्टार्क

41

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

Get-ChildItem -Exclude "house chores-*" | rename-item -NewName { "house chores-" + $_.Name }

यह प्रक्रिया को एक से अधिक बार किसी एक फ़ाइल का नाम बदलने से रोकेगा।


1
_ अपने सुझाव एक कम विशिष्ट उदाहरण है, जो $ शामिल करने पर विचार कर कृपया Directory.Name।
ofer.sheffer

18

मुफ्त सॉफ्टवेयर ' थोक नाम उपयोगिता ' भी अच्छी तरह से काम करता है (और उन्नत कार्यों के लिए भी शक्तिशाली है)। डाउनलोड और इंस्टॉलेशन में एक मिनट लगता है।

मूल वेबसाइट पर स्क्रीनशॉट और ट्यूटोरियल देखें ।

-

मैं चरण-दर-चरण स्क्रीनशॉट प्रदान नहीं कर सकता क्योंकि छवियों को क्रिएटिव कॉमन्स लाइसेंस के तहत जारी करना होगा , और मेरे पास सॉफ़्टवेयर के स्क्रीनशॉट नहीं हैं।

डिस्क्लेमर: मैं किसी भी तरह से उक्त सॉफ्टवेयर / कंपनी से जुड़ा नहीं हूं। मुझे अपने काम के लिए उत्पाद पसंद आया, यह ओपी और इसी तरह की आवश्यकताओं को पूरा करता है, इस प्रकार अनुशंसा करता है।


कुछ बिंदु पर खुद का उपयोग करना शुरू कर दिया। थ्रेड में कुछ जोड़ने के लिए +1।
ofer.sheffer

@ ofer.sheffer धन्यवाद।

यह उत्तर विषय से बाहर है! -1
मार्को डेमियो

1
@MarcoDemaio प्रतिक्रिया के लिए धन्यवाद। ओपी एक कार्य करना चाहता है, और लिंक किए गए सॉफ़्टवेयर को करना आसान है। मेरा मानना ​​है, समाधान की जटिलता इसे अधिक प्रासंगिक नहीं बनाती है।

@ गोपालअगरवाल: क्षमा करें, आप सही हैं मैंने उनके प्रश्न में पढ़ा "मैं एक फ़ोल्डर में फ़ाइलों का नाम बदलना चाहूंगा" और मुझे लगा कि वह एक विंडोज़ बैच फ़ाइल की तलाश कर रहे हैं। मैंने अपना -1 निकाला।
मार्को डेमायो

9

यह मेरे लिए काम करता है, पहले सीडी में निर्देशिका है कि आप फ़ाइल नाम को बदलना चाहते हैं और फिर निम्न आदेश चलाएँ:

Get-ChildItem | rename-item -NewName { "house chores-" + $_.Name }

5
यह एक अनंत लूप का कारण बनता है जब तक कि फ़ाइल का नाम विंडोज की सीमा तक न पहुंच जाए। इसके बजाय @ Dave.Gugg की प्रतिक्रिया का उपयोग करें: stackoverflow.com/a/37279979/2179408
रॉब बेल

7

मैं अपने बालों को फाड़ रहा था क्योंकि कुछ वस्तुओं के लिए, पुनर्नामित आइटम का फिर से नाम बदल दिया जाएगा (बार-बार, जब तक कि अधिकतम फ़ाइल नाम लंबाई तक नहीं पहुंच गया था)। यह Get-ChildItem और dir के आउटपुट को पाइप करने दोनों के लिए हो रहा था। मुझे लगता है कि वर्णानुक्रमिक क्रम में बदलाव के कारण नामांकित फाइलें उठाई गईं। मैंने इस समस्या को निम्नलिखित तरीके से हल किया:

Get-ChildItem -Path . -OutVariable dirs
foreach ($i in $dirs) { Rename-Item $i.name ("<MY_PREFIX>"+$i.name) }

इस "लॉक्स" के परिणाम $ बाल डेयर में गेट-चाइल्डइम द्वारा लौटाए गए हैं और आप इस डर के बिना उस पर पुनरावृति कर सकते हैं कि ऑर्डर बदल जाएगा या अन्य मज़ेदार व्यवसाय होगा।

डेव.गग का उपयोग करने के लिए टिप-एक्सक्लूड को भी इस समस्या को हल करना चाहिए, लेकिन यह एक अलग दृष्टिकोण है; शायद अगर फ़ाइलों का नाम बदला जा रहा है तो पहले से ही उपसर्ग में इस्तेमाल किया गया पैटर्न है।

(डिस्क्लेमर: मैं बहुत ज्यादा पॉवरशेल n00b हूं।)


2

@ Ofer.sheffer के उत्तर के आधार पर यह आदेश नाम बदलकर फ़ाइल नाम की वर्तमान तिथि को बढ़ा देगा । अर्थात "फाइल.टेक्स्ट" चालू फ़ोल्डर में सभी फाइलों के लिए "20180329 - file.txt" बन जाता है

for %a in (*.*) do ren "%a" "%date:~-4,4%%date:~-7,2%%date:~-10,2% - %a"

2

@ Ofer.sheffer उत्तर के आधार पर, यह एक प्रत्यय जोड़ने के लिए CMD संस्करण है (यह सवाल नहीं है, लेकिन यह पृष्ठ अभी भी # 1 Google परिणाम है यदि आप प्रत्यय खोजते हैं)। एक्सटेंशन की वजह से यह थोड़ा अलग है।

for %a in (*.*) do ren "%~a" "%~na-affix%~xa"

आप "-affix" भाग को बदल सकते हैं।


0

मुझे पता है कि यह एक पुराना प्रश्न है, लेकिन मैंने विभिन्न उत्तरों से बहुत कुछ सीखा है, लेकिन एक फ़ंक्शन के रूप में अपने स्वयं के समाधान के साथ आया। यह गतिशील रूप से मूल फ़ोल्डर को सभी फ़ाइलों के लिए उपसर्ग के रूप में जोड़ना चाहिए जो एक निश्चित पैटर्न से मेल खाता है, लेकिन केवल अगर इसमें पहले से मौजूद उपसर्ग नहीं है।

function Add-DirectoryPrefix($pattern) {
    # To debug, replace the Rename-Item with Select-Object
    Get-ChildItem -Path .\* -Filter $pattern -Recurse | 
        Where-Object {$_.Name -notlike ($_.Directory.Name + '*')} | 
        Rename-Item -NewName {$_.Directory.Name + '-' + $_.Name}
        # Select-Object -Property Directory,Name,@{Name = 'NewName'; Expression= {$_.Directory.Name + '-' + $_.Name}}
}

https://gist.github.com/kmpm/4f94e46e569ae0a4e688581231fa9e00

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.