2012-02-21 7 views
13

के साथ निर्देशिका में सभी फ़ाइलों का नाम बदलें मैं एक बैच या cmd फ़ाइल कैसे लिखूं जो निर्देशिका में सभी फ़ाइलों का नाम बदल देगा? मैं विंडोज का उपयोग कर रहा हूँ।विंडोज बैच स्क्रिप्ट

बदलें इस:

750_MOT_Forgiving_120x90.jpg 
751_MOT_Persecution_1_120x90.jpg 
752_MOT_Persecution_2_120x90.jpg 
753_MOT_Hatred_120x90.jpg 
754_MOT_Suffering_120x90.jpg 
755_MOT_Freedom_of_Religion_120x90.jpg 
756_MOT_Layla_Testimony_1_120x90.jpg 
757_MOT_Layla_Testimony_2_120x90.jpg 

इस के लिए:

750_MOT_Forgiving_67x100.jpg 
751_MOT_Persecution_1_67x100.jpg 
752_MOT_Persecution_2_67x100.jpg 
753_MOT_Hatred_67x100.jpg 
754_MOT_Suffering_67x100.jpg 
755_MOT_Freedom_of_Religion_67x100.jpg 
756_MOT_Layla_Testimony_1_67x100.jpg 
757_MOT_Layla_Testimony_2_67x100.jpg 
+1

खिड़कियों और जो कुछ भी एक .bat या .cmd फ़ाइल में चलाता है? – Blainer

+0

दोस्त, अगर आप मदद चाहते हैं तो आप सभी को मानसिक होने की उम्मीद नहीं कर सकते हैं। –

उत्तर

22

एक और नाम (मदद के लिए प्रकार FOR /?) लूप करने के लिए बयान, स्ट्रिंग खोज और की जगह (मदद के लिए प्रकार SET /?) के लिए ।

@echo off 
setlocal enableDelayedExpansion 
for %%F in (*120x90.jpg) do (
    set "name=%%F" 
    ren "!name!" "!name:120x90=67x100!" 
) 


अद्यतन - 2012-11-07

मैं जांच की है के नाम कैसे वाइल्डकार्ड के साथ आदेश सौदों: How does the Windows RENAME command interpret wildcards?

ऐसा लगता है कि इस विशेष समस्या को बहुत आसानी से हल किया जा सकता बैच स्क्रिप्ट के लिए किसी भी आवश्यकता के बिना RENAME कमांड का उपयोग करना।

ren *_120x90.jpg *_67x100.* 

_ के बाद वर्णों की संख्या कोई फर्क नहीं पड़ता। नाम 120x90x या xxxxxxxxxx बनने पर नाम ठीक से काम करेगा। इस समस्या का महत्वपूर्ण पहलू यह है कि अंतिम _ और . के बीच संपूर्ण पाठ बदल दिया गया है।

+2

मुझे यकीन नहीं है कि यह एक पूर्ण उदाहरण है। लेकिन [यह] (http://stackoverflow.com/a/3811991) ने मेरे लिए एक आकर्षण की तरह काम किया :) –

+2

@Anand - मैंने केवल REN कमांड का उपयोग करके एक बहुत ही सरल समाधान जोड़ा है। आपकी टिप्पणी में लिंक मूल रूप से मेरे मूल उत्तर के समान है। – dbenham

+0

क्या आप अपने दो उत्तरों को विभाजित कर सकते हैं? मैं इस में 'ren' एक लाइनर छोड़ दूंगा; यह सबसे अच्छा है! –

8

विंडोज 7 के रूप में आप इसे PowerShell की एक पंक्ति में कर सकते हैं।

powershell -C "gci | % {rni $_.Name ($_.Name -replace '120x90', '67x100')}" 

स्पष्टीकरण

powershell -C "..." एक PowerShell सत्र उद्धृत आदेश को चलाने के लिए लॉन्च किया गया। जब आदेश पूरा होता है तो यह बाहरी खोल पर लौटता है। -C-Command के लिए छोटा है।

gci वर्तमान निर्देशिका में सभी फाइलें लौटाता है। यह Get-ChildItem के लिए उपनाम है।

| % {...} प्रत्येक फ़ाइल को संसाधित करने के लिए एक पाइपलाइन बनाता है। %Foreach-Object के लिए उपनाम है।

$_.Name पाइपलाइन में वर्तमान फ़ाइल का नाम है।

($_.Name -replace '120x90', '67x100') नया फ़ाइल नाम बनाने के लिए -replace ऑपरेटर का उपयोग करता है। पहले सबस्ट्रिंग की प्रत्येक घटना को दूसरे सबस्ट्रिंग के साथ बदल दिया जाता है।

rni प्रत्येक फ़ाइल का नाम बदलता है। पहला पैरामीटर (जिसे -Path कहा जाता है) फ़ाइल की पहचान करता है। दूसरा पैरामीटर (-NewName कहा जाता है) नया नाम निर्दिष्ट करता है। rniRename-Item के लिए उपनाम है।

उदाहरण

$ dir 
Volume in drive C has no label. 
Volume Serial Number is A817-E7CA 

Directory of C:\fakedir\test 

11/09/2013 16:57 <DIR>   . 
11/09/2013 16:57 <DIR>   .. 
11/09/2013 16:56     0 750_MOT_Forgiving_120x90.jpg 
11/09/2013 16:57     0 751_MOT_Persecution_1_120x90.jpg 
11/09/2013 16:57     0 752_MOT_Persecution_2_120x90.jpg 
       3 File(s)    0 bytes 
       2 Dir(s) 243,816,271,872 bytes free 

$ powershell -C "gci | % {rni $_.Name ($_.Name -replace '120x90', '67x100')}" 

$ dir 
Volume in drive C has no label. 
Volume Serial Number is A817-E7CA 

Directory of C:\fakedir\test 

11/09/2013 16:57 <DIR>   . 
11/09/2013 16:57 <DIR>   .. 
11/09/2013 16:56     0 750_MOT_Forgiving_67x100.jpg 
11/09/2013 16:57     0 751_MOT_Persecution_1_67x100.jpg 
11/09/2013 16:57     0 752_MOT_Persecution_2_67x100.jpg 
       3 File(s)    0 bytes 
       2 Dir(s) 243,816,271,872 bytes free 
+0

@MethodMan टाइमस्टैम्प का क्या मूल्य होना चाहिए? –

+0

मैंने रोबकोपी स्क्रिप्ट के साथ गड़बड़ करके और बल्ले फ़ाइल के अंदर एक गोटो फ़ंक्शन बनाकर इसे समझ लिया .. धन्यवाद, मैं पावरहेल से ज्यादा परिचित नहीं हूं लेकिन अगर मुझे टाइमस्टैम्प मान होना पड़े तो यह एक मास्क के साथ 'yyyymmddss' होगा फाइलों की संख्या के आधार पर '_1 _2 _3 आदि ... 'होगा .. मैं robocopy का उपयोग कर बैच फ़ाइल में ऐसा करने में सक्षम था .. – MethodMan