खोज…


परिचय

यह विषय उन चीजों पर ध्यान केंद्रित करेगा जो एक (अनिवार्य नहीं) एक बैच फ़ाइल में करनी चाहिए। इन "सर्वोत्तम प्रथाओं" का उपयोग प्रभाव और बैच फ़ाइल के कार्य को बढ़ा सकता है।

उल्लेख। उद्धरण

अधिकांश ऑनलाइन बैच स्क्रिप्ट बहुत सारे उद्धरण मुद्दों के साथ आती हैं।


उदाहरण और समाधान

उदाहरण ए

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

दोनों स्क्रिप्ट सटीक समान परिणाम का उत्पादन करते हैं, लेकिन नई स्क्रिप्ट बहुत छोटी और स्पष्ट है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow