विंडोज़ कमांड लाइन पर उपयोगकर्ता संकेतों के लिए दो कमांड उपलब्ध हैं:
/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 से पढ़े गए अक्षर ) को स्वीकार करता है और यदि उपयोगकर्ता गलत कुंजी दबाता है तो त्रुटि बीप को आउटपुट करता है।
/C
Ctrl+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.exe
Windows चला प्रयुक्त कंप्यूटर पर उपलब्ध नहीं है।
@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.bat
Y में परिणाम 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.com
MS-DOS और Windows 95/98 / ME के रूप में भी अक्षम कमांड एक्सटेंशन के साथ काम करते हैं, उन्होंने भी उनका समर्थन किया है। IF तुलना संचालकों के बारे में अधिक जानकारी के लिए, Windows बैच फ़ाइलों में NEQ, LSS, GTR, आदि के बराबर प्रतीक देखें ।
- कमांड
goto :EOF
को वास्तव में बैच फ़ाइल प्रसंस्करण से बाहर निकलने के लिए सक्षम कमांड एक्सटेंशन की आवश्यकता होती है। अधिक जानकारी के लिए देखें कि GOTO: EOF कहां लौटेगा?
उपयोग की गई कमांड को समझने के लिए और वे कैसे काम करते हैं, कमांड प्रॉम्प्ट विंडो खोलें, वहां निम्नलिखित कमांड निष्पादित करें, और प्रत्येक कमांड के लिए प्रदर्शित पूरी तरह से सभी सहायता पृष्ठों को बहुत सावधानी से पढ़ें।
choice /?
echo /?
endlocal /?
goto /?
if /?
set /?
setlocal /?
यह सभी देखें:
SET AREYOUSURE=N
जोड़ूंगा, वह है प्रॉम्प्ट से पहले एक अतिरिक्त है ताकि आप उस कमांड विंडो में स्क्रिप्ट को पहले ही चला सकें। इसके बिना डिफ़ॉल्ट पहले से चयनित विकल्प बना रहेगा।