Ada dua perintah yang tersedia untuk petunjuk pengguna di baris perintah windows:
- diatur dengan opsi yang
/Ptersedia 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 /Puntuk 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.exeWindows Server 2003 dapat disalin ke direktori %SystemRoot%\System32pada 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.batmenggunakan 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
cmdkarena 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.exetidak 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.comalih-alih cmd.exesebagai penerjemah perintah.
Baris perintah set "UserChoice=!UserChoice: =!"ditambahkan untuk memungkinkan untuk memanggil file batch ini dengan echo Y | call PromptExample.batpada 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.batmenghasilkan 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 UserChoicedengan YSPACE sebagai nilai akan menghasilkan menjalankan prompt untuk kedua kalinya dengan opsi yang Ndidefinisikan 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
UserChoicedengan Ndan Y, tetapi nilai UserChoiceyang dikelilingi oleh "dengan "N"dan "Y".
- The JIKA operator perbandingan
EQUdan NEQdirancang utama untuk membandingkan dua bilangan bulat dalam jangkauan -2147483648 sampai 2147483647 dan bukan untuk membandingkan dua string. EQUdan NEQjuga berfungsi untuk perbandingan string, tetapi hasil dari membandingkan string dalam tanda kutip ganda pada upaya yang tidak berguna untuk mengubah string kiri menjadi integer. EQUdan hanya NEQdapat 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.comMS-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 :EOFmembutuhkan 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=Nsebelum prompt untuk menghapus pilihan jika Anda sudah menjalankan skrip sebelumnya di jendela perintah itu. Tanpanya default akan tetap menjadi pilihan yang dipilih sebelumnya.