batch-file
सर्वोत्तम प्रथाएं
खोज…
परिचय
यह विषय उन चीजों पर ध्यान केंद्रित करेगा जो एक (अनिवार्य नहीं) एक बैच फ़ाइल में करनी चाहिए। इन "सर्वोत्तम प्रथाओं" का उपयोग प्रभाव और बैच फ़ाइल के कार्य को बढ़ा सकता है।
उल्लेख। उद्धरण
अधिकांश ऑनलाइन बैच स्क्रिप्ट बहुत सारे उद्धरण मुद्दों के साथ आती हैं।
उदाहरण और समाधान
उदाहरण ए
if %var%==abc echo Test
यह कोड काम करता है - जब %var%
की सामग्री में स्थान या अन्य विशेष वर्ण नहीं होते हैं। अब मान %var%
कि %var%
में 1 व्हाट्सएप है। अब cmd.exe
देखता है:
if ==abc echo Test
यह एक विफलता का कारण होगा क्योंकि cmd.exe
इस सिंटैक्स को नहीं समझता है।
समाधान ए
if "%var%"=="abc" echo Test
उद्धरण का उपयोग करके, cmd.exe
पूरे %var%
(स्थान और विशेष वर्णों सहित) को केवल एक सामान्य स्ट्रिंग के रूप में देखता है। फिर भी यह सबसे सुरक्षित तुलना पद्धति नहीं है। सबसे सुरक्षित echo
, pipe
, और findstr
का उपयोग करता है।
उदाहरण बी
cd C:\User\Spaced Name\Spaced FileName.txt
cd
केवल निर्देशिका को C:\User\Spaced
, क्योंकि cd
केवल एक पथ तर्क को स्वीकार करता है।
समाधान बी
बस रास्ते के चारों ओर उद्धरण जोड़कर, इस मुद्दे को हल किया जाएगा।
cd "C:\User\Spaced Name\Spaced FileName.txt"
कुछ उदाहरण भी हैं जो उद्धरणों का उपयोग करके बेहतर काम करते हैं, जैसे set /a
बयान, आदि। लेकिन, जब कोई स्ट्रिंग्स पर काम करता है जिसमें रिक्त स्थान या विशेष वर्ण होते हैं, तो आमतौर पर उद्धरण का उपयोग करना बहुत सुरक्षित होता है।
स्पेगेटी कोड
स्पेगेटी कोड का मतलब एक कोड स्निपेट है जो कई, और अक्सर भ्रमित करने वाली संरचनाओं का उपयोग करता है। जैसे GOTO
s, अपवाद और असंगत कोड।
उदाहरण और समाधान
उदाहरण ए
@echo off
set /a counter=0
:Loop
set /a counter=%counter% + 1
echo %counter%
if %counter% equ 10 goto :exit
goto :Loop
:exit
यह कार्यक्रम बहुत सारी छलांग के साथ आता है, जिससे हमें यह जानना कठिन हो जाता है कि स्क्रिप्ट वास्तव में क्या कर रही है।
समाधान ए
@echo off
for /l %%G in (0,1,10) echo %%G
कम GOTO
एस का उपयोग करते हुए, हमने कोड की मात्रा को बहुत कम कर दिया, और हम वास्तविक कोड पर ध्यान केंद्रित कर सकते हैं।
उदाहरण बी
निम्नलिखित कथनों पर विचार करें।
:endGame
if %player1Score% gtr %player2Score% goto :player1wins
if %player1Score% lss %player2Score% goto :player2wins
goto :tie
:player1wins
echo player 1 wins
goto :eof
:player2wins
echo player 2 wins
goto :eof
:tie
echo tie
goto :eof
इस स्निपेट में बहुत सारे goto
बयानों की आवश्यकता होती है और यह डीबग करने के लिए भ्रामक हो सकता है। इन कथनों को सरल बनाने के लिए, हम call
कमांड का उपयोग कर सकते हैं। यहां बेहतर स्थिति में उपरोक्त स्क्रिप्ट है।
:endGame
if %player1Score% gtr %player2Score% call :message player 1 wins
if %player1Score% lss %player2Score% call :message player 2 wins
if %player1Score% equ %player2Score% call :message tie
goto :eof
:message
echo %*
goto :eof
दोनों स्क्रिप्ट सटीक समान परिणाम का उत्पादन करते हैं, लेकिन नई स्क्रिप्ट बहुत छोटी और स्पष्ट है।