2009-06-22 13 views
12

तो, मुझे कोई विस्तार के बिना फाइलों का एक गुच्छा मिला है।कोई विस्तार के साथ फाइलें खोजें और नाम बदलें?

  1. कोई विस्तार के साथ फ़ाइलें खोजें (एक निर्दिष्ट फ़ोल्डर में)
  2. फ़ाइल नाम

मैं के अंत तक .bla जोड़ें: मैं एक विंडोज़ बैच स्क्रिप्ट मिलेगी कि लिखना चाहते हैं ऐसे विंडोज बैच स्क्रिप्ट नोब मुझे यह भी नहीं पता कि कहां से शुरू करना है। सुझाव?

उत्तर

25

विंडोज़ बैच फ़ाइलों के लिए, इस .bla विस्तार करने के लिए कोई विस्तार के साथ ही फ़ाइलों का नाम होगा:

rename *. *.bla 

सूचना पहला तर्क एक स्टार और एक बिंदु है: *।

दूसरा तर्क है: * .bla

शुरू डॉट संयोजन इस संदर्भ में कोई एक्सटेंशन के साथ फ़ाइलों का प्रतिनिधित्व करता है (*।)।

से पहले:

06/21/2009 11:57 PM     6 test 
06/21/2009 11:57 PM     7 test.exe 
06/21/2009 11:57 PM     7 test2 

के बाद:

06/21/2009 11:57 PM     6 test.bla 
06/21/2009 11:57 PM     7 test.exe 
06/21/2009 11:57 PM     7 test2.bla 

अतिरिक्त ध्यान दें: विपरीत कमांडलाइन कोई विस्तार फ़ाइलों में सभी .bla फ़ाइलों का नाम होगा।

संपादित:

रिकर्सिवली उपनिर्देशिका भर में कोई विस्तार (पथ में रिक्त स्थान का समर्थन नहीं करता) के साथ फ़ाइलों का नाम बदलने के लिए:

@echo off 
FOR /F %%i in ('dir /b/s/A-d') DO (
    if "%%~xi" == "" rename "%%~fi" "%%~ni.bla" 
) 

EDIT2:

रिकर्सिवली का नाम बदलने फ़ाइलों के लिए उपनिर्देशिकाओं में कोई विस्तार नहीं (पथ में रिक्त स्थान का समर्थन करता है):

@echo off 
for /f "tokens=* delims= " %%i in ('dir /b/s/A-d') DO (
    if "%%~xi" == "" rename "%%~fi" "%%~ni.bla" 
) 
+0

मैंने इसे माना, लेकिन नाम के अंत में भी एक बिंदु नहीं है ... क्या यह अभी भी काम करेगा? – Alan

+0

इसके अलावा, मैं उपफोल्डर कैसे शामिल करूं? – Alan

+0

@Alan - हाँ यह काम करेगा, और हम कितने सबफ़ोल्डर के बारे में बात कर रहे हैं? – JFV

5

उपनिर्देशिका में यह करने के लिए इस का उपयोग करें:

:

for /f %a in ('dir /b /ad /s') do rename %a\*. *.bla 

यदि आप एक बैच फ़ाइल में इस का उपयोग कर रहे हैं, तो आप दोगुना करने के लिए '%'

for /f %%a in ('dir /b /ad /s') do rename %%a\*. *.bla 

संपादित की जरूरत है

और यदि आपके पास अपनी निर्देशिका नामों में रिक्त स्थान हैं, तो आप इसे (बैच संस्करण) आजमा सकते हैं:

for /f "tokens=* delims= " %%a in ('dir /b /ad /s') do rename "%%a\*." "*.bla" 
+0

अच्छा! (15 char limit) –

+0

यहां मामूली समस्या - रिक्त स्थान वाले निर्देशिकाओं के लिए काम नहीं कर रहा है ... अन्यथा अच्छा लग रहा है – Alan

6

यहाँ (यह मानते हुए कि फ़ाइल पथ रिक्तियां नहीं होती हैं) रिकर्सिवली कोई एक्सटेंशन के साथ फ़ाइलों का नाम बदलने के लिए एक और संभव आदेश दिया गया है:

for /f %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla" 

बैच (दोगुनी % के साथ) संस्करण:

@echo off 
for /f %%i in ('dir *. /b /s /a-d') do (
    rename "%%~fi" "%%~ni.bla" 
) 


यदि फ़ाइल या फ़ोल्डर नामों में रिक्त स्थान हैं, तो इस सी का उपयोग करें ommand बजाय:

for /f "tokens=* delims= " %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla" 

बैच संस्करण:

@echo off 
for /f "tokens=* delims= " %%i in ('dir *. /b /s /a-d') do (
    rename "%%~fi" "%%~ni.bla" 
) 

संपादित करें: यहां भी कम है एक लाइनर कि रास्तों में रिक्त स्थान का समर्थन करता है:

for /r %i in (*.) do ren "%~fi" "%~ni.bla" 

बैच संस्करण:

@for /r %%i in (*.) do ren "%%~fi" "%%~ni.bla" 
संबंधित मुद्दे