2014-08-30 7 views
7

का उपयोग कर निर्देशिका में एकाधिक फ़ाइलों का नाम बदलें मेरे पास लगभग 1000 छवियां हैं और उनके पास "IMG-12223" नाम है। मैं उन्हें 1 2 3 4 का नाम बदलना चाहता हूं ... 1000. मैं यह कैसे कर सकता हूं। मैंने एक बैच स्क्रिप्ट लिखी है जो फाइलों को सूचीबद्ध करती है लेकिन मुझे नहीं पता कि प्रत्येक फ़ाइल का नाम कैसे बदलें। जैसे 1 के लिए नाम "आईएमजी-12,223", नाम "आईएमजी-23,441" 2 करने के लिए और इतने पर के साथ दूसरे छवि के साथ पहली छवि का नाम बदलने ...बैच स्क्रिप्ट

for /r %%i in (*) do (
    echo %c% 
) 
+0

बस एक संकेत: फ्रीवेयर मल्टीमीडिया दर्शक [इरफान व्यू] (http://www.irfanview.com/) ने एक [बैच नाम] में निर्मित किया है (http://graphicssoft.about.com/cs/renamers/ht /irfanviewrename.htm) काउंटर के साथ छवियों का नाम बदलने की सुविधा। इसके अलावा शेयरवेयर फ़ाइल प्रबंधक [कुल कमांडर] (http://www.ghisler.com/) में एक [बहु-नाम] है (http://www.ghisler.com/advanced.htm#tutorial_rename) सुविधा और भी विकल्पों के साथ सुविधा है और उपयोग करने के लिए बहुत आसान है। इस तरह के फ़ाइल नामकरण कार्य के लिए बैच फ़ाइल का उपयोग करके मेरी राय में यह समझ में नहीं आता है कि निर्धारित कार्य के रूप में स्वचालित रूप से निष्पादित नहीं किया जा रहा है। – Mofi

उत्तर

12

यहाँ स्क्रिप्ट है। बस स्क्रिप्ट को अपने फ़ोल्डर में रखें और इसे चलाएं।

@echo off & setlocal EnableDelayedExpansion 

set a=1 
for /f "delims=" %%i in ('dir /b *') do (
    if not "%%~nxi"=="%~nx0" (
    ren "%%i" "!a!" 
    set /a a+=1 
) 
) 

आप एक्सटेंशन रखना चाहते हैं, यानी नाम बदलने "आईएमजी-12223.jpg", "आईएमजी-12224.jpg", आदि के लिए "1.jpg", "2.jpg", आदि, आप निम्न स्क्रिप्ट का उपयोग कर सकते हैं।

@echo off & setlocal EnableDelayedExpansion 

set a=1 
for /f "delims=" %%i in ('dir /b *.jpg') do (
    ren "%%i" "!a!.jpg" 
    set /a a+=1 
) 

[अद्यतन] Here're लाइनों जैक टिप्पणी में उल्लेख किया है के लिए स्पष्टीकरण।

  • setlocal EnableDelayedExpansion

सामान्य तौर पर, हम चाहते हैं चर a विस्तार में देरी हो जब यह मार डाला है, लेकिन नहीं लाइन पढ़ा जाता है। इसके बिना, परिवर्तनीय a इसके बढ़ते मूल्य को प्राप्त नहीं कर सकता है लेकिन हमेशा 1.

EnableDelayedExpansion के विवरण के लिए, कृपया https://stackoverflow.com/a/18464353/2749114 का उत्तर देखें।

  • for /f "delims=" %%i in ('dir /b *.jpg')

यहाँ dir/b विकल्प के साथ, केवल सभी jpg फ़ाइलों के नाम दाखिल सूचीबद्ध करता है।

for लूप ट्रैवर्स और सभी जेपीजी फ़ाइलों का नाम बदलता है।

delims विकल्प के लिए, क्योंकि डिफ़ॉल्ट डेलीमीटर वर्ण एक स्थान है, delims= विकल्प के बिना, यह फ़ाइल नामों में रिक्त स्थान वाली छवि फ़ाइलों के साथ विफल रहता है। अर्थात। विकल्प के बिना "img with spaces.jpg" नाम की एक छवि फ़ाइल के लिए, %%i का मान "img" है लेकिन पूरा नाम "spaces.jpg के साथ img" नहीं है, जो गलत है।

for लूप के लिए, कृपया पृष्ठ http://ss64.com/nt/for_f.html देखें।

  • if not "%%~ni"=="%~n0"

मैं if not "%%~nxi"=="%~nx0" के लिए इसे बदल अधिक सटीक होना है। और जुड़े कोड अपडेट कर दिए गए हैं।

यह वास्तव में बल्ले फ़ाइल का नाम बदलने से बचने के लिए उपयोग किया जाता है। अगर हम केवल "jpg" फ़ाइलों पर नामकरण सीमित करते हैं, तो लाइन की आवश्यकता नहीं है।

%%~nxi प्रत्येक फ़ाइल के लिए विस्तार के साथ फ़ाइल नाम है। और %~nx0 एक्सटेंशन के साथ चल रही बल्ले फ़ाइल है। विवरण के लिए, कृपया पृष्ठ DOS BAT file equivalent to Unix basename command? देखें।

+0

आपके उत्तर के लिए धन्यवाद, क्या आप निम्नलिखित पंक्तियों को "setlocal EnableDelayedExpansion", "for/f" delims = "%% i में ('dir/b * .jpg')", अगर नहीं "%% ~ ni" == "% ~ n0" –

+0

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

0

इसे आज़माएं, आपके पास टेक्स्ट फ़ाइल में नामों की जोड़ी है, फिर लूप मान और जादू करें। नाम खाली रिक्त स्थान से अलग होते हैं। यह आपको पुराने-> नए फ़ाइल नामों को तदनुसार मानचित्र करने की अनुमति देता है। या आप idx + 1 काउंटर रखें और इसे नए फ़ाइल नामों के लिए उपयोग करें।

keyvalue.bat

@echo off 
set idx=0 
for /F "tokens=1,2" %%A in (keyvalue.txt) do call :PROCESS "%%A" "%%B" 
GOTO :END 

:PROCESS 
set var1=%~1 
set var2=%~2 
set /A idx=%idx%+1 
echo %var1% goes to %var2% (%idx%) 
GOTO :EOF 

:END 
pause 

keyvalue.txt

file888.dat newfile1.dat 
file333.dat newfile2.dat 
file9.dat newfile3.dat 
file01.dat newfile4.dat 
7

एक बैच स्क्रिप्ट के लिए कोई जरूरत नहीं है। कमांड लाइन से एक साधारण एक लाइनर नौकरी कर सकता है :-)

मैं फाइलों की सूची जेनरेट करने के लिए डीआईआर/बी का उपयोग करता हूं, फाइलों की संख्या के लिए FINDSTR पर पाइप किया गया है, परिणाम के विश्लेषण के लिए फॉर/एफ के साथ संलग्न सभी और नाम बदलें

for /f "delims=: tokens=1*" %A in ('dir /b *.jpg^|findstr /n "^"') do @ren "%B" "%A%~xB" 

डबल percents आप एक बैच लिपि में आदेश डाल करना चाहते हैं।

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