मुझे समझ में नहीं आता कि आप बैच फ़ाइल का उपयोग क्यों नहीं कर सकते हैं। लेकिन यहां एक समाधान है जो अधिकांश फ़ाइल नामों के साथ काम करना चाहिए।
क्रिटिकल - पहले क्या आप वाकई एक अपरिभाषित चर नाम है बनाना चाहिए, मैं fname
set "fname="
अगला आदेश को वास्तव में नाम करना है इस्तेमाल करेंगे। अगर fname पहले ही परिभाषित किया गया है तो यह ठीक से काम नहीं करेगा।
for %a in (prefix*.txt) do @(set "fname=%a" & call ren "%fname%" "%fname:*prefix=%")
fname चर प्रत्येक यात्रा के लिए परिभाषित किया गया है और उसके बाद वाक्य रचना %fname:*prefix=%
कुछ भी नहीं के साथ "उपसर्ग" की पहली आवृत्ति बदल देता है। मुश्किल बात यह है कि विंडोज़ पहले सबसे पहले पार्स किए जाने पर% fname% का विस्तार करने का प्रयास करता है। बेशक यह काम नहीं करेगा क्योंकि इसे अभी तक परिभाषित नहीं किया गया है। कमांड लाइन पर जब चर नहीं मिला तो पर्सेंट संरक्षित होते हैं। कॉल के बाद एक अतिरिक्त विस्तार चरण का कारण बनता है जो चर सेट किया गया है, इसलिए विस्तार कार्य करता है।
यदि आदेश चलाने से पहले fname परिभाषित किया गया है, तो यह लूप के भीतर असाइन किए गए मान के बजाय प्रत्येक पुनरावृत्ति के लिए उसी फ़ाइल का नाम बदलने का प्रयास करेगा।
यदि आप एक अलग उपसर्ग के साथ फिर से आदेश को चलाने के लिए चाहते हैं, तो आपको पहले परिभाषा को फिर से साफ़ करना होगा।
संपादित - यहाँ एक बैच "RemovePrefix.bat" उस काम
::RemovePrefix.bat prefix fileMask
@echo off
setlocal
for %%A in ("%~1%~2") do (
set "fname=%%~A"
call ren "%%fname%%" "%%fname:*%~1=%%"
)
मान लीजिए आप फ़ाइलों तो आप
RemovePrefix "prefix" "*.txt"
को क्रियान्वित करते हुए स्क्रिप्ट का प्रयोग करेंगे
"prefixName.txt"
की तरह नाम दिया था, करता है नाम की फ़ाइल है
बैच फ़ाइल आपकी वर्तमान निर्देशिका में फ़ाइलों का नाम बदल जाएगी। बैच फ़ाइल को आपकी वर्तमान निर्देशिका में भी तब तक होना होगा जब तक कि बैच फ़ाइल उस निर्देशिका में मौजूद न हो जो आपके PATH चर में है। या जब आप इसे कॉल करते हैं तो आप बैच फ़ाइल के लिए पूर्ण पथ निर्दिष्ट कर सकते हैं।
बैच फ़ाइल में विस्तार के नियम अलग-अलग हैं।चर के लिए% ए के बजाय %% ए के रूप में संदर्भित किया जाना चाहिए, और %% fname %% को प्रारंभ में विस्तारित नहीं किया गया है, इसके बजाय डबल पर्सेंट को एकल पर्सेंट में परिवर्तित किया जाता है और फिर कॉल के बाद% fname% का विस्तार किया जाता है। इससे कोई फर्क नहीं पड़ता कि fname पहले से ही बैच फ़ाइल के साथ परिभाषित किया गया है। SETLOCAL बैच फ़ाइल में अस्थायी (स्थानीय) fname की परिभाषा बनाता है।
ये आदेश बहुत बड़ी निर्देशिकाओं के साथ अच्छी तरह से काम नहीं करते हैं। यह उन फ़ाइलों को उपसर्ग जोड़ता रहता है जो इसे पहले से ही उपसर्ग जोड़ते हैं। – hnviet