Windows Batch Scripting

फ़ाइलनाम संशोधन के लिए बैच स्क्रिप्टिंग

Spread the love

यह ट्यूटोरियल दर्शाता है कि किसी निर्देशिका में फ़ाइलनामों के आरंभ या अंत से निर्दिष्ट संख्या में वर्णों को हटाने के लिए बैच स्क्रिप्ट कैसे बनाएँ। बैच स्क्रिप्टिंग विंडोज़ के भीतर फ़ाइल प्रबंधन कार्यों को स्वचालित करने का एक सरल लेकिन शक्तिशाली तरीका प्रदान करती है।

विषयवस्तु सारणी

वर्णों को हटाने के लिए बैच फ़ाइल बनाना

एक नई टेक्स्ट फ़ाइल बनाकर शुरुआत करें (जैसे, नोटपैड का उपयोग करके) और उसे .bat एक्सटेंशन (जैसे, rename_files.bat) के साथ सहेजें। इस फ़ाइल में बैच स्क्रिप्ट निर्देश होंगे।

हमारे स्क्रिप्ट का मूल विंडोज़ कमांड इंटरप्रेटर की स्ट्रिंग हेरफेर क्षमताओं का उपयोग करता है %variable:~start,length% सिंटैक्स का उपयोग करके। यह किसी चर से सबस्ट्रिंग निकालता है। start प्रारंभिक स्थिति (0-आधारित अनुक्रमणिका) है, और length निकालने के लिए वर्णों की संख्या है। ऋणात्मक start मान स्ट्रिंग के अंत से गिना जाता है।

फ़ाइल नामों के अंत से वर्णों को हटाना

आइए किसी निर्देशिका में सभी .txt फ़ाइलों से अंतिम 3 वर्णों को हटाने का उदाहरण देते हैं:

@echo off
setlocal

for %%a in (*.txt) do (
  set "filename=%%a"
  set "newfilename=!filename:~0,-3!"
  if "!newfilename!"=="" (
    echo %%a छोड़ रहा हूँ: फ़ाइल नाम बहुत छोटा है।
  ) else (
    ren "%%a" "!newfilename!"
  )
)

endlocal

इस उन्नत स्क्रिप्ट में 3 वर्णों से कम फ़ाइलनामों के साथ समस्याओं को रोकने के लिए त्रुटि हैंडलिंग शामिल है।

  • @echo off: कमांड प्रतिध्वनित करना रोकता है।
  • setlocal: एक स्थानीय वातावरण बनाता है, चर को अलग करता है।
  • for %%a in (*.txt) do (...): .txt फ़ाइलों के माध्यम से पुनरावृति करता है।
  • set "filename=%%a": फ़ाइलनाम को एक चर में असाइन करता है (उद्धरण रिक्त स्थान को संभालते हैं)।
  • set "newfilename=!filename:~0,-3!": सबस्ट्रिंग निकालता है (अंतिम 3 वर्णों को छोड़कर सभी)।
  • if "!newfilename!"=="" (...): खाली फ़ाइलनामों की जाँच करता है और उन्हें छोड़ देता है।
  • ren "%%a" "!newfilename!": फ़ाइल का नाम बदलता है (उद्धरण रिक्त स्थान को संभालते हैं)।
  • endlocal: स्थानीय वातावरण समाप्त करता है।

फ़ाइल नामों की शुरुआत से वर्णों को हटाना

शुरुआत से वर्णों को हटाने के लिए, सबस्ट्रिंग निष्कर्षण को संशोधित करें। उदाहरण के लिए, पहले 5 वर्णों को हटाने के लिए:

@echo off
setlocal

for %%a in (*.txt) do (
  set "filename=%%a"
  set "newfilename=!filename:~5!"
  ren "%%a" "!newfilename!"
)

endlocal

यहाँ, ~5 6वें वर्ण (अनुक्रमणिका 5) से निष्कर्षण शुरू करता है, प्रभावी रूप से पहले 5 को हटा देता है।

त्रुटियों और सीमांत मामलों को संभालना

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

उन्नत उपयोग: परिवर्तनशील वर्ण हटाना

चर संख्या में वर्णों को हटाने के लिए, गणना को परिभाषित करने के लिए चरों का उपयोग करें। आप उपयोगकर्ता से इनपुट के लिए संकेत दे सकते हैं:

@echo off
setlocal

set /p "charsToRemove=हटाने के लिए वर्णों की संख्या दर्ज करें: "

for %%a in (*.txt) do (
  set "filename=%%a"
  set "newfilename=!filename:~%charsToRemove%!"
  ren "%%a" "!newfilename!"
)

endlocal

अप्रत्याशित परिणामों को रोकने के लिए उपयोगकर्ता इनपुट को मान्य करना याद रखें।

निष्कर्ष

इस गाइड ने दिखाया कि फ़ाइलनामों से वर्णों को हटाने के लिए बैच स्क्रिप्ट कैसे बनाएँ। ऐसी स्क्रिप्ट चलाने से पहले हमेशा अपनी फ़ाइलों का बैकअप लें। फ़ाइल एक्सटेंशन, वर्ण गणना और त्रुटि हैंडलिंग को समायोजित करके अपनी विशिष्ट आवश्यकताओं के अनुसार इन स्क्रिप्ट को अनुकूलित करें।

अक्सर पूछे जाने वाले प्रश्न

  • प्रश्न: यदि मेरे फ़ाइलनामों में रिक्त स्थान हैं तो क्या होगा? उत्तर: ren कमांड में फ़ाइलनामों के चारों ओर उद्धरण रिक्त स्थान को सही ढंग से संभालने के लिए आवश्यक हैं।
  • प्रश्न: क्या मैं चर संख्या में वर्णों को हटा सकता हूँ? उत्तर: हाँ, जैसा कि उन्नत उपयोग अनुभाग में दिखाया गया है।
  • प्रश्न: यदि फ़ाइलनाम उन वर्णों की संख्या से कम है जिन्हें मैं हटाना चाहता हूँ तो क्या होगा? उत्तर: बेहतर स्क्रिप्ट छोटे फ़ाइलनामों को छोड़कर इसे संभालती हैं।
  • प्रश्न: क्या मैं इसे अन्य फ़ाइल प्रकारों पर उपयोग कर सकता हूँ? उत्तर: हाँ, for लूप में *.txt को वांछित वाइल्डकार्ड (जैसे, सभी फ़ाइलों के लिए *.*) में बदलें।

प्रातिक्रिया दे

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *