विंडोज़ कमांड लाइन पर उपयोगकर्ता संकेतों के लिए दो कमांड उपलब्ध हैं:
/Pसक्षम कमांड एक्सटेंशन के साथ सभी विंडोज़ एनटी संस्करणों पर उपलब्ध विकल्प के साथ सेट करें और
- choice.exe Windows Vista पर डिफ़ॉल्ट और पीसी उपयोगकर्ताओं के लिए और Windows Server 2003 और Windows के बाद के सर्वर संस्करण पर बाद में विंडोज संस्करणों से उपलब्ध।
सेट विंडोज कमांड प्रोसेसर का एक आंतरिक कमांड है cmd.exe। /Pएक स्ट्रिंग के लिए एक उपयोगकर्ता को संकेत करने का विकल्प केवल सक्षम कमांड एक्सटेंशन के साथ उपलब्ध है जो डिफ़ॉल्ट रूप से सक्षम हैं अन्यथा आजकल लगभग कोई बैच फ़ाइल काम नहीं करेगी।
पसंद। exe एक अलग कंसोल एप्लीकेशन (बाहरी कमांड) है, जिसमें स्थित है %SystemRoot%\System32। choice.exeविंडोज सर्वर 2003 को %SystemRoot%\System32विंडोज एक्सपी मशीन पर निर्देशिका में विंडोज एक्सपी पर उपयोग के लिए कॉपी किया जा सकता है , जैसे कि कई अन्य कमांड विंडोज एक्सपी पर डिफ़ॉल्ट रूप से उपलब्ध नहीं हैं, लेकिन विंडोज सर्वर 2003 पर डिफ़ॉल्ट रूप से उपलब्ध हैं।
निम्नलिखित कारणों से SET / P के उपयोग पर CHOICE के उपयोग का पक्ष लेना सबसे अच्छा अभ्यास है :
- विकल्प विकल्प (और ) के बाद निर्दिष्ट केवल चाबियों (क्रमशः STDIN से पढ़े गए अक्षर ) को स्वीकार करता है और यदि उपयोगकर्ता गलत कुंजी दबाता है तो त्रुटि बीप को आउटपुट करता है।
/CCtrl+C
- CHOICE को किसी स्वीकार्य व्यक्ति की तुलना में किसी अन्य कुंजी को दबाने की आवश्यकता नहीं है। एक बार स्वीकार्य कुंजी दबाए जाने के बाद CHOICE तुरंत बाहर निकल जाती है जबकि SET / P के लिए आवश्यक है कि उपयोगकर्ता इनपुट के साथ RETURNया समाप्त करे ENTER।
- उपयोगकर्ता की प्रतीक्षा किए बिना कुछ सेकंड के बाद डिफ़ॉल्ट विकल्प के साथ डिफ़ॉल्ट विकल्प के साथ स्वचालित रूप से जारी रखने के लिए CHOICE के साथ संभव है ।
- तुरंत दूसरे बैच फ़ाइल से प्रॉम्प्ट को स्वचालित रूप से उत्तर देने पर आउटपुट बेहतर होता है, जो CHOICE
echo Y | call PromptExample.bat का उपयोग करने की तरह ही प्रॉम्प्ट के साथ बैच फ़ाइल को कॉल करता है ।
- उपयोगकर्ता की पसंद के मूल्यांकन के साथ बहुत आसान है की पसंद की वजह से पसंद दबाया कुंजी (चरित्र) जो करने के लिए असाइन किया गया है के अनुसार एक मूल्य के साथ बाहर निकलता है ERRORLEVEL जो आसानी से अगले मूल्यांकन किया जा सकता।
- SET / P पर उपयोग किए जाने वाले पर्यावरण चर को परिभाषित नहीं किया जाता है यदि उपयोगकर्ता केवल कुंजी दबाता है RETURNया ENTERउपयोगकर्ता को संकेत देने से पहले इसे परिभाषित नहीं किया गया है। SET / P कमांड लाइन पर उपयोग किया गया पर्यावरण वैरिएबल वर्तमान मान रखता है यदि पहले परिभाषित किया गया है और उपयोगकर्ता बस RETURNया दबाता है ENTER।
- उपयोगकर्ता को एक स्ट्रिंग सहित SET / P के साथ संकेत दिए जाने पर कुछ भी दर्ज करने की स्वतंत्रता है, जो बाद में
cmdएक सिंटैक्स त्रुटि के कारण बैच फ़ाइल निष्पादन से बाहर निकलता है , या बैच फ़ाइल में कमांड के निष्पादन में बिल्कुल भी शामिल नहीं है। अच्छा कोडित बैच फ़ाइल। यह गलती से या जानबूझकर गलत उपयोगकर्ता इनपुट के खिलाफ सेट / पी सुरक्षित करने के लिए कुछ प्रयासों की आवश्यकता है ।
यहाँ वरीय का उपयोग कर एक शीघ्र उदाहरण है की पसंद और वैकल्पिक रूप से सेट / पी पर choice.exeWindows चला प्रयुक्त कंप्यूटर पर उपलब्ध नहीं है।
@echo off
echo This is an example for prompting a user.
echo/
if exist "%SystemRoot%\System32\choice.exe" goto UseChoice
setlocal EnableExtensions EnableDelayedExpansion
:UseSetPrompt
set "UserChoice=N"
set /P "UserChoice=Are you sure [Y/N]? "
set "UserChoice=!UserChoice: =!"
if /I "!UserChoice!" == "N" endlocal & goto :EOF
if /I not "!UserChoice!" == "Y" goto UseSetPrompt
endlocal
goto Continue
:UseChoice
%SystemRoot%\System32\choice.exe /C YN /N /M "Are you sure [Y/N]? "
if errorlevel 2 goto :EOF
:Continue
echo So your are sure. Okay, let's go ...
नोट: यह बैच फ़ाइल कमांड एक्सटेंशन का उपयोग करती है, जो कमांड दुभाषिया के command.comबजाय विंडोज 95/98 / ME पर उपलब्ध नहीं हैं cmd.exe।
कमांड लाइन set "UserChoice=!UserChoice: =!"को इस बैच फ़ाइल echo Y | call PromptExample.batको Windows NT4 / 2000 / XP पर कॉल करना संभव बनाने के लिए जोड़ा जाता है और इसके उपयोग की आवश्यकता नहीं होती है echo Y| call PromptExample.bat। यह दो स्ट्रिंग तुलनाओं को चलाने से पहले STDIN से पढ़े गए स्ट्रिंग से सभी रिक्त स्थान को हटा देता है ।
echo Y | call PromptExample.batY में परिणाम SPACEपर्यावरण चर को सौंपा जा रहा है UserChoice। इसका परिणाम यह होगा कि दो बार प्रॉम्प्ट को संसाधित करने के "Y "कारण न तो केस-असंवेदनशील समान है "N"और न ही "Y"पहले सभी रिक्त स्थान को हटाने के बिना। तो UserChoiceसाथ वाईSPACE के रूप में मूल्य के विकल्प के साथ शीघ्र दूसरी बार चल रहा है में परिणाम होगा Nके रूप में दूसरा शीघ्र निष्पादन पर बैच फ़ाइल में डिफ़ॉल्ट रूप में परिभाषित किया जो बैच फ़ाइल संसाधन के एक अप्रत्याशित बाहर निकलने में अगले परिणाम नहीं। हां, SET / P का सुरक्षित उपयोग वास्तव में मुश्किल है, है ना?
विकल्पों की एक सूची में से एक विकल्प के लिए उपयोगकर्ता को संकेत देने के लिए SET / P और CHOICE के उपयोग पर और भी अधिक विवरण के लिए , गलत उपयोगकर्ता इनपुट पर बैच फ़ाइल निष्पादन को छोड़ने से विंडोज कमांड दुभाषिया को रोकने के लिए कैसे देखें ?
कुछ और संकेत:
- यदि तुलना दो तार के साथ और तुलना ऑपरेटर के दाईं से बाईं सहित दोहरे उद्धरण चिह्नों। इसलिए केस-असंवेदनशील के
UserChoiceसाथ Nऔर का मूल्य नहीं है Y, लेकिन साथ में UserChoiceघिरा हुआ और का मूल्य है ।""N""Y"
- यदि तुलना ऑपरेटरों
EQUऔर NEQरेंज में दो पूर्णांकों की तुलना -२१४७४८३६४८ 2147483647 के लिए और दो तार की तुलना के लिए नहीं प्राथमिक डिजाइन किए हैं। EQUऔर NEQस्ट्रिंग्स की तुलना के लिए भी काम करते हैं, लेकिन परिणाम के लिए डबल स्ट्रिंग में एक स्ट्रिंग के लिए बाएं स्ट्रिंग को पूर्णांक में बदलने के लिए दोहरे उद्धरणों में स्ट्रिंग्स की तुलना करते हैं। EQUऔर NEQकेवल सक्षम कमांड एक्सटेंशन के साथ उपयोग किया जा सकता है। स्ट्रिंग तुलना के लिए तुलना ऑपरेटर हैं ==और not ... ==जो command.comMS-DOS और Windows 95/98 / ME के रूप में भी अक्षम कमांड एक्सटेंशन के साथ काम करते हैं, उन्होंने भी उनका समर्थन किया है। IF तुलना संचालकों के बारे में अधिक जानकारी के लिए, Windows बैच फ़ाइलों में NEQ, LSS, GTR, आदि के बराबर प्रतीक देखें ।
- कमांड
goto :EOFको वास्तव में बैच फ़ाइल प्रसंस्करण से बाहर निकलने के लिए सक्षम कमांड एक्सटेंशन की आवश्यकता होती है। अधिक जानकारी के लिए देखें कि GOTO: EOF कहां लौटेगा?
उपयोग की गई कमांड को समझने के लिए और वे कैसे काम करते हैं, कमांड प्रॉम्प्ट विंडो खोलें, वहां निम्नलिखित कमांड निष्पादित करें, और प्रत्येक कमांड के लिए प्रदर्शित पूरी तरह से सभी सहायता पृष्ठों को बहुत सावधानी से पढ़ें।
choice /?
echo /?
endlocal /?
goto /?
if /?
set /?
setlocal /?
यह सभी देखें:
SET AREYOUSURE=Nजोड़ूंगा, वह है प्रॉम्प्ट से पहले एक अतिरिक्त है ताकि आप उस कमांड विंडो में स्क्रिप्ट को पहले ही चला सकें। इसके बिना डिफ़ॉल्ट पहले से चयनित विकल्प बना रहेगा।