Windows komut satırında kullanıcı istemleri için kullanılabilen iki komut vardır:
/P
Etkinleştirilmiş komut uzantılarına sahip tüm Windows NT sürümlerinde bulunan seçenekle ayarla ve
- choice.exe , Windows Vista ve sonraki Windows sürümlerinde PC kullanıcıları için ve Windows Server 2003 ve sonraki sunucu sürümlerinde varsayılan olarak kullanılabilir.
set , Windows komut işlemcisinin dahili bir komutudur cmd.exe
. /P
Bir kullanıcıdan bir dizeyi sorma seçeneği , yalnızca varsayılan olarak etkinleştirilmiş etkin komut uzantılarıyla kullanılabilir, aksi takdirde artık neredeyse hiçbir toplu iş dosyası çalışmaz.
choice.exe , içinde bulunan ayrı bir konsol uygulamasıdır (harici komut) %SystemRoot%\System32
. choice.exe
Windows Server 2003'ün, %SystemRoot%\System32
Windows XP'de varsayılan olarak bulunmayan ancak Windows Server 2003'te varsayılan olarak bulunan diğer birçok komut gibi Windows XP'de kullanım için bir Windows XP makinesindeki dizine kopyalanabilir .
Bu bir iyilik kullanımına en iyi yöntemdir SEÇİM kullanımı üzerinde SET / P aşağıdaki nedenlerden dolayı:
- SEÇİM , yalnızca (ve ) seçeneğinden sonra belirtilen tuşları (sırasıyla STDIN'den okunan karakterler) kabul eder ve kullanıcı yanlış bir tuşa basarsa bir hata sesi çıkarır.
/C
Ctrl+C
- SEÇİM , kabul edilebilir olanlardan başka herhangi bir tuşa basmayı gerektirmez. SEÇİM , kabul edilebilir bir tuşa basıldığında hemen çıkar, SET / P ise kullanıcının RETURNveya ile girişi bitirmesini gerektirir ENTER.
- İle mümkündür SEÇİM otomatik kullanıcı beklemeden bazı saniye sonra varsayılan seçeneği ile devam etmek için bir varsayılan seçeneği ve bir zaman aşımı tanımlamak için.
- Çıktı gibi istemi kullanılarak şey ile toplu dosyasını çağırır başka toplu dosyasından otomatik istemi yanıtlayan üzerinde daha iyidir
echo Y | call PromptExample.bat
kullanımı hakkında SEÇİM .
- Kullanıcının seçtiği değerlendirilmesi ile çok daha kolaydır SEÇİM nedeniyle SEÇİM atanan preslenmiş tuşunun (karakter) 'e göre bir değerle çıkar ERRORLEVEL kolayca sonraki değerlendirilebilir.
- SET / P'de kullanılan ortam değişkeni , kullanıcı sadece tuşa bastığında RETURNveya ENTERkullanıcıya sorulmadan önce tanımlanmadıysa tanımlanmaz. SET / P komut satırında kullanılan ortam değişkeni, önceden tanımlanmışsa mevcut değerini korur ve kullanıcı sadece RETURNveya tuşuna basar ENTER.
- Kullanıcı, SET / P ile istendiğinde, daha sonra
cmd
bir sözdizimi hatası nedeniyle toplu iş dosyasının yürütülmesinden çıkılmasına veya toplu iş dosyasında hiç bulunmayan komutların yürütülmesine neden olan bir dize dahil herhangi bir şey girme özgürlüğüne sahiptir. iyi kodlanmış toplu iş dosyası. SET / P'yi yanlışlıkla veya kasıtlı olarak yanlış kullanıcı girdisine karşı güvenli hale getirmek için biraz çaba gösterilmesi gerekiyor .
Burada tercih edilen kullanarak hızlı bir örnektir SEÇİM alternatif olarak ve SET / P ile choice.exe
Windows işletim kullanılan bilgisayar üzerinde mevcut.
@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 ...
Not: Bu toplu iş dosyası, komut yorumlayıcı command.com
yerine Windows 95/98 / ME'de bulunmayan komut uzantılarını kullanır cmd.exe
.
Komut satırı set "UserChoice=!UserChoice: =!"
, echo Y | call PromptExample.bat
Windows NT4 / 2000 / XP'de bu toplu iş dosyasını çağırmayı mümkün kılmak için eklenir ve kullanımını gerektirmez echo Y| call PromptExample.bat
. İki dize karşılaştırmasını çalıştırmadan önce STDIN'den okunan dizedeki tüm boşlukları siler .
echo Y | call PromptExample.bat
Y'ninSPACE ortam değişkenine atanmasıyla sonuçlanır UserChoice
. Bu "Y "
, ne büyük / küçük harfe duyarlı "N"
olmadığından veya "Y"
ilk olarak tüm boşlukları silmeden istemi iki kez işlemekle sonuçlanır . Bu nedenle UserChoice
, değer olarak YSPACE ile N
, ikinci komut istemi yürütmesinde toplu iş dosyasında varsayılan olarak tanımlanan seçenekle istemin ikinci kez çalıştırılmasıyla sonuçlanır ve bu , daha sonra toplu iş dosyası işlemenin beklenmedik bir şekilde çıkmasıyla sonuçlanır. Evet, SET / P'nin güvenli kullanımı gerçekten aldatıcı, değil mi?
SET / P ve CHOICE kullanımıyla ilgili daha fazla ayrıntı için, bir seçenek listesinden kullanıcıya bir seçenek sorma konusunda daha fazla ayrıntı için, Windows komut yorumlayıcısının yanlış bir kullanıcı girişinde toplu dosya yürütmeden çıkmasını nasıl durdurabilirim?
Birkaç ipucu daha:
- IF , karşılaştırma işlecinin sol ve sağındaki iki dizeyi çift tırnak dahil ederek karşılaştırır . Karşılaştırıldığında küçük harf duyarsız değeri olmadığı Yani
UserChoice
birlikte N
ve Y
fakat değeri UserChoice
ile çevrili "
olan "N"
ve "Y"
.
- EĞER karşılaştırma operatörleri
EQU
ve NEQ
aralıkta iki tamsayı karşılaştıran -2147483648 2147483647 için değil, iki dizeyi karşılaştırmak için birincil tasarlanmıştır. EQU
ve NEQ
dizge karşılaştırmaları için de çalışır, ancak sol dizeyi bir tam sayıya dönüştürmek için gereksiz bir girişimde çift tırnak içindeki dizeleri karşılaştırmaya neden olur. EQU
ve NEQ
yalnızca etkin komut uzantılarıyla kullanılabilir. Dize karşılaştırmaları için karşılaştırma operatörleri ==
ve not ... ==
hatta hatta engelli komut uzantıları ile hangi iş command.com
MS-DOS ve / 98, Windows 95 / ME zaten onları destekledi. IF karşılaştırma operatörleri hakkında daha fazla ayrıntı için bkz . Windows toplu iş dosyalarında NEQ, LSS, GTR, vb. İle eşdeğer Sembol .
- Komut
goto :EOF
, toplu iş dosyası işlemeden gerçekten çıkmak için etkinleştirilmiş komut uzantılarını gerektirir. Daha fazla ayrıntı için bkz. GOTO: EOF nereye dönüyor?
Kullanılan komutları ve nasıl çalıştıklarını anlamak için bir komut istemi penceresi açın, aşağıdaki komutları uygulayın ve her komut için görüntülenen tüm yardım sayfalarını çok dikkatli bir şekilde okuyun.
choice /?
echo /?
endlocal /?
goto /?
if /?
set /?
setlocal /?
Ayrıca bakınız:
SET AREYOUSURE=N
, komut dosyasını daha önce o komut penceresinde çalıştırdıysanız, seçimi temizlemek için komut isteminden önce ek bir şeydir . Bu olmadan varsayılan, önceden seçilen seçim olarak kalacaktır.