मैं बैच स्क्रिप्टिंग की दुनिया में नया हूँ इसलिए बुनियादी सवालों के रूप में जो भी प्रकट हो सकता है उसे क्षमा करें। मैं सीख रहा हूं क्योंकि मुझे अलग-अलग काम सौंपे जाते हैं और मैं स्वचालन का एक बड़ा प्रस्तावक हूं जहां संभव है। मेरे पास कई बैच फाइलें हैं जो कई कार्य करती हैं। इन फ़ाइलों में से प्रत्येक का पथ हार्ड-कोडित था जैसे c: \ temp। d: \ data, आदि बैच फ़ाइल में। प्रारंभ में मैंने इन्हें एक टेक्स्ट फ़ाइल में स्थानांतरित कर दिया, जिसे मैं एक बैच फ़ाइल उदा से कॉल कर सकता था
for /f "tokens=1,2 delims==" %%R in (config.txt) do (
if %%R==bdata set bdata=%%S
if %%R==cdata set cdata=%%S
)
Config.txt फ़ाइल में ये मान हैं
bdata=c:\temp
cdata=d:\data
मुझे एहसास हुआ कि हर बार मुझे एक नया चर बनाने की आवश्यकता होगी, मुझे config.txt फ़ाइल के साथ-साथ config.bat फ़ाइलों को भी अपडेट करना होगा।
मैंने तय किया कि मैं सभी मानों को केवल config.bat फ़ाइल में निम्नानुसार स्थानांतरित करूंगा
set bdata=c:\temp
set cdata=d:\data
मैंने तब मौजूदा बैच फ़ाइलों में से प्रत्येक को हार्ड-कोडेड पथों के बजाय चर को कॉल करने के लिए अद्यतन किया। मैंने config.bat को छोड़कर प्रत्येक बैच फ़ाइल में कोड की निम्न पंक्तियाँ भी जोड़ी हैं। Config.bat फ़ाइल में जोड़ी गई एकमात्र अतिरिक्त पंक्ति है @echo off।
@echo off
setlocal enableextensions enabledelayedexpansion
call config.bat
मेरे पास एक और बैच फ़ाइल है जो सभी बैच फ़ाइलों को क्रम से कॉल करने को केंद्रीकृत करती है। इस बैच फ़ाइल का नाम start.bat है। मैं जो प्रयोग कर रहा हूं start /wait, वह इसलिए है क्योंकि जहां delete.batपहले रन compress.batखत्म करने का मौका मिला है , वहां के उदाहरण हैं ।
start /wait compress.bat
start /wait validate.bat
start /wait delete.bat
प्रशन
- क्या यह मूल्यों को केंद्रीकृत करने का सबसे अच्छा तरीका है और यदि नहीं, तो बेहतर तरीका क्या है?
- क्या मुझे
setlocal enableextensions enabledelayedexpansionसभी मौजूदा बैच फ़ाइलों में निर्दिष्ट करने की आवश्यकता है ? - क्या सभी बैच फ़ाइलों के पास @echo बंद होना चाहिए या यह मात्र config.bat फ़ाइल के लिए पर्याप्त है?
- है
start /waitसबसे अच्छा तरीका है एक से अधिक फ़ाइलों कॉल करने के लिए? क्या मैं उक्त कमांड का उपयोग करके एक बैच फ़ाइल से दूसरे में मान पारित कर सकता हूं? - सभी बैच फ़ाइलों में अलग-अलग फ़ंक्शन होते हैं जैसे कि मूव, डिलीट, आदि हालांकि %% a या %% b का उपयोग करते हैं। यह ठीक है?
उदाहरण के लिए
validate.batफ़ाइल कोड है
for %%a in (%bdata%\*.*) do if "%%~xa" == "" move /Y "%bdata%\%%~xa" "%bdata%\%done%"
और delete.bat fileकोड है
for %%a in (%bdata%\*.*) do if "%%~xa" == ".txt" del "%%a"