Ada dua perintah yang tersedia untuk petunjuk pengguna di baris perintah windows:
- diatur dengan opsi yang
/P
tersedia di semua versi Windows NT dengan ekstensi perintah yang diaktifkan dan
- choice.exe tersedia secara default di Windows Vista dan versi Windows yang lebih baru untuk pengguna PC dan di Windows Server 2003 dan Windows versi server yang lebih baru.
set adalah perintah internal prosesor perintah Windows cmd.exe
. Opsi /P
untuk meminta pengguna untuk string hanya tersedia dengan ekstensi perintah yang diaktifkan yang diaktifkan secara default karena jika tidak, hampir tidak ada file batch yang akan berfungsi lagi saat ini.
choice.exe adalah aplikasi konsol terpisah (perintah eksternal) yang terletak di %SystemRoot%\System32
. choice.exe
Windows Server 2003 dapat disalin ke direktori %SystemRoot%\System32
pada mesin Windows XP untuk digunakan pada Windows XP seperti banyak perintah lain yang tidak tersedia secara default pada Windows XP, tetapi tersedia secara default pada Windows Server 2003.
Merupakan praktik terbaik untuk lebih memilih penggunaan PILIHAN daripada penggunaan SET / P karena alasan berikut:
- PILIHAN hanya menerima kunci (masing-masing karakter dibaca dari STDIN ) yang ditentukan setelah opsi
/C
(dan Ctrl+C) dan mengeluarkan bunyi bip kesalahan jika pengguna menekan tombol yang salah.
- PILIHAN tidak perlu menekan tombol lain selain salah satu tombol yang dapat diterima. CHOICE keluar segera setelah tombol yang dapat diterima ditekan sementara SET / P mengharuskan pengguna menyelesaikan input dengan RETURNatau ENTER.
- Dengan PILIHAN, Anda dapat menentukan opsi default dan batas waktu untuk melanjutkan secara otomatis dengan opsi default setelah beberapa detik tanpa menunggu pengguna.
- Outputnya lebih baik dalam menjawab prompt secara otomatis dari file batch lain yang memanggil file batch dengan prompt menggunakan sesuatu seperti
echo Y | call PromptExample.bat
menggunakan PILIHAN .
- Evaluasi pilihan pengguna jauh lebih mudah dengan PILIHAN karena PILIHAN keluar dengan nilai sesuai dengan tombol yang ditekan (karakter) yang ditetapkan ke ERRORLEVEL yang dapat dengan mudah dievaluasi selanjutnya.
- Variabel lingkungan yang digunakan pada SET / P tidak ditentukan jika pengguna hanya menekan tombol RETURNatau ENTERdan itu tidak ditentukan sebelum meminta pengguna. Variabel lingkungan yang digunakan pada baris perintah SET / P mempertahankan nilainya saat ini jika ditentukan sebelumnya dan pengguna hanya menekan RETURNatau ENTER.
- Pengguna memiliki kebebasan untuk memasukkan apa pun saat diminta dengan SET / P termasuk string yang kemudian mengakibatkan keluarnya eksekusi file batch
cmd
karena kesalahan sintaks, atau dalam pelaksanaan perintah yang tidak disertakan sama sekali dalam file batch pada tidak file batch berkode bagus. Diperlukan upaya agar SET / P aman dari kesalahan input pengguna atau sengaja salah.
Berikut adalah contoh cepat menggunakan PILIHAN yang disukai dan sebagai alternatif SET / P pada choice.exe
tidak tersedia pada komputer bekas yang menjalankan 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 ...
Catatan: File batch ini menggunakan ekstensi perintah yang tidak tersedia di Windows 95/98 / ME menggunakan command.com
alih-alih cmd.exe
sebagai penerjemah perintah.
Baris perintah set "UserChoice=!UserChoice: =!"
ditambahkan untuk memungkinkan untuk memanggil file batch ini dengan echo Y | call PromptExample.bat
pada Windows NT4 / 2000 / XP dan tidak memerlukan penggunaan echo Y| call PromptExample.bat
. Ini menghapus semua spasi dari string yang dibaca dari STDIN sebelum menjalankan perbandingan dua string.
echo Y | call PromptExample.bat
menghasilkan YSPACE ditugaskan ke variabel lingkungan UserChoice
. Itu akan mengakibatkan pemrosesan prompt dua kali karena "Y "
tidak peka huruf besar / kecil sama "N"
atau "Y"
tanpa menghapus semua spasi terlebih dahulu. Jadi UserChoice
dengan YSPACE sebagai nilai akan menghasilkan menjalankan prompt untuk kedua kalinya dengan opsi yang N
didefinisikan sebagai default dalam file batch pada eksekusi prompt kedua yang selanjutnya menghasilkan keluarnya pemrosesan file batch yang tidak terduga. Ya, keamanan penggunaan SET / P memang rumit, bukan?
Untuk detail lebih lanjut tentang penggunaan SET / P dan PILIHAN untuk meminta pengguna memilih dari daftar opsi, lihat jawaban di Bagaimana cara menghentikan penerjemah perintah Windows dari menghentikan eksekusi file batch pada input pengguna yang salah?
Beberapa petunjuk lagi:
- IF membandingkan dua string kiri dan kanan operator perbandingan dengan menyertakan tanda kutip ganda. Sehingga kasus-sensitif dibandingkan bukanlah nilai
UserChoice
dengan N
dan Y
, tetapi nilai UserChoice
yang dikelilingi oleh "
dengan "N"
dan "Y"
.
- The JIKA operator perbandingan
EQU
dan NEQ
dirancang utama untuk membandingkan dua bilangan bulat dalam jangkauan -2147483648 sampai 2147483647 dan bukan untuk membandingkan dua string. EQU
dan NEQ
juga berfungsi untuk perbandingan string, tetapi hasil dari membandingkan string dalam tanda kutip ganda pada upaya yang tidak berguna untuk mengubah string kiri menjadi integer. EQU
dan hanya NEQ
dapat digunakan dengan ekstensi perintah yang diaktifkan. Operator perbandingan untuk perbandingan string sedang ==
dan not ... ==
yang bekerja bahkan dengan ekstensi perintah yang dinonaktifkan karena bahkan command.com
MS-DOS dan Windows 95/98 / ME sudah mendukungnya. Untuk detail selengkapnya tentang operator perbandingan IF, lihat Simbol yang setara dengan NEQ, LSS, GTR, dll. Di file batch Windows .
- Perintah ini
goto :EOF
membutuhkan ekstensi perintah yang diaktifkan untuk benar-benar keluar dari pemrosesan file batch. Untuk lebih jelasnya lihat Ke mana GOTO: EOF kembali?
Untuk memahami perintah yang digunakan dan cara kerjanya, buka jendela prompt perintah, jalankan perintah berikut di sana, dan baca seluruhnya semua halaman bantuan yang ditampilkan untuk setiap perintah dengan sangat hati-hati.
choice /?
echo /?
endlocal /?
goto /?
if /?
set /?
setlocal /?
Lihat juga:
SET AREYOUSURE=N
sebelum prompt untuk menghapus pilihan jika Anda sudah menjalankan skrip sebelumnya di jendela perintah itu. Tanpanya default akan tetap menjadi pilihan yang dipilih sebelumnya.