Saya memiliki file Windows .bat yang ingin saya terima input pengguna dan kemudian menggunakan hasil input itu sebagai bagian dari panggilan untuk perintah tambahan.
Sebagai contoh, saya ingin menerima ID proses dari pengguna, dan kemudian menjalankan jstack terhadap ID itu, memasukkan hasil panggilan jstack ke file. Namun, ketika saya mencoba ini, itu tidak berhasil.
Ini contoh file file bat saya:
@echo off
set /p id=Enter ID:
echo %id%
jstack > jstack.txt
dan inilah yang muncul di jstack.txt:
Masukkan ID: Hentikan pekerjaan batch (Y / T)?
windows
batch-file
prompt
Nakilon
sumber
sumber
choice
daripadaset /p
Enter ID:
beberapa ID yang seharusnya Anda pasok dari keyboard.Jawaban:
Coba ini:
Anda kemudian dapat menggunakan
%id%
sebagai parameter ke file batch lain sepertijstack %id%
.Sebagai contoh:
sumber
set /p id=Enter ID:\r\n set /p pw=Enter Passwd:
dan tidak ingin teks kata sandi ditampilkan di jendela, apalagi, tampilkan di buffer perintah "DosKey"? Saya sudah mencoba beberapa cara berbeda, dan belum dapat menemukan cara untuk melakukan ini, di luar penulisan program C kecil untuk mengambil input, dan menugaskannya ke EnvVar, tapi itu curang! :) Saya ingin ini bekerja dengan HANYA Windows CMD."Enter ID: "
. Memberi sedikit ruang manis antara prompt dan jawaban pengguna.Delete the internet?No silly
vsDelete the internet? No silly
.jstack %id% > jstack.txt
SETLOCAL
danENDLOCAL
jika Anda ingin menyimpan variabel lokal ke batch saat ini. Lihat ss64.com/nt/endlocal.htmlSintaksnya adalah seperti ini:
set /p variable=[string]
Lihat http://commandwindows.com/batch.htm atau http://www.robvanderwoude.com/userinput.php untuk melihat masukan pengguna yang lebih dalam dengan berbagai versi file batch OS Windows.
Setelah mengatur variabel, Anda dapat menggunakannya dengan cara berikut.
perhatikan
%VariableName%
sintaksnyasumber
cmd.exe
shell Windows 7 , dan masing-masing - tanpa kecuali - memberikan input pengguna ke variabel yang dinamai secara sewenang-wenang. Bagaimana tanggapan Anda mengenai apa yang sudah disediakan?=
itu tidak perlu.cmd
yang tidak memungkinkan?SET /P variable=[promptString]
Saya tidak yakin jika ini adalah kasus untuk semua versi Windows, namun pada mesin XP yang saya miliki, saya perlu menggunakan yang berikut ini:
Tanpa string tanda kutip , saya mendapatkan berbagai hasil tergantung pada teks.
sumber
set /p "var1=Prompt String"
set /p Var1="Prompt String "
Kemudian ketika Anda menjalankan file dan pengguna mengetik sesuatu yang Anda dapatkanPrompt String Yes
bukannyaPrompt StringYes
Ruang setelah
=
sangat penting.sumber
jika saya mendapatkan apa yang Anda inginkan, ini berfungsi dengan baik. Anda dapat menggunakan% input% di perintah lain juga.
sumber
sumber
:start
?:start
hanyalah penanda ... Misalnya, ia mungkin menggunakan:end
juga, yang menyebabkan hal-hal seperti pembersihan variabel terjadi, atau untuk memanggilpopd
, atau sesuatu seperti itu. Kemudian, Anda juga memiliki opsi untuk menggunakanIF ERRORLEVEL1 GOTO END
... atau bahkanGOTO ERR
, dan di bawah:err
ada sesuatu seperti gema Terjadi Kesalahan saat mencoba untuk mendapatkan nomor file. goto: end Mungkin itu kebiasaan, ...Tidak ada parameter yang didokumentasikan / diminta untuk SETX karena ada untuk SET.
Jika Anda perlu meminta variabel lingkungan yang akan selamat dari reboot, Anda dapat menggunakan SETX untuk menyimpannya.
Variabel yang dibuat oleh SETX tidak akan dapat digunakan sampai Anda me-restart command prompt. Namun, Anda bisa SETX variabel yang sudah SET, bahkan jika itu memiliki nama yang sama.
Ini berfungsi untuk saya di Windows 8.1 Pro:
(Tanda kutip di sekitar variabel yang ada diperlukan.)
Prosedur ini memungkinkan Anda untuk menggunakan variabel yang dibuat SET sementara selama sesi saat ini dan akan memungkinkan Anda untuk menggunakan kembali variabel yang dibuat SETX pada saat reboot komputer atau memulai kembali prompt CMD.
(Diedit untuk memformat paragraf kode dengan benar.)
sumber
Saya memiliki cmd kecil yang saya gunakan ketika menyiapkan pc untuk klien: ia memanggil pengguna untuk input, dan mengubah nama pc menjadi itu.
sumber
Ada dua kemungkinan.
Anda lupa untuk menempatkan
%id%
dijstack
panggilan.Jadi keseluruhan file batch yang benar adalah:
Dan / Atau 2. Anda memasukkannya ke dalam kode (dan lupa memberi tahu kami dalam pertanyaan) tetapi ketika Anda menjalankan file batch Anda menekan tombol Enter alih-alih mengetikkan ID (misalnya 1234).
Apa yang terjadi adalah hasil dari dua kesalahan ini:
jstack
seharusnya dipanggil dengan id yang Anda berikan.Tetapi dalam kasus Anda (sesuai dengan kode yang Anda berikan dalam pertanyaan) Anda menyebutnya tanpa variabel apa pun. Kau menulis:
Jadi ketika Anda menjalankan
jstack
tanpa variabel itu menghasilkan yang berikut:Kesalahan kedua Anda adalah bahwa Anda menekan Enter bukannya memberikan nilai ketika program meminta Anda:
Enter ID:
. Jika Anda akan memasukkan ID pada titik ini, katakan 1234,%id%
variabel akan menjadi nilai itu, dalam kasus kami 1234. Tetapi Anda TIDAK memberikan nilai dan sebaliknya menekan Enter. Ketika Anda tidak memberikan variabel nilai apa pun, dan jika variabel itu tidak disetel ke hal lain sebelumnya, maka variabel%id%
tersebut disetel ke promptset
perintah !! Jadi sekarang%id%
diatur keEnter ID:
yang digaungkan di layar Anda seperti yang diminta dalam file batch SEBELUM Anda memanggil jstack.Tapi saya curiga Anda TIDAK memiliki
jstack %id% > jstack.txt
kode file batch Anda dengan%id
(dan dihilangkan karena kesalahan dari pertanyaan), dan Anda menekan enter tanpa mengetikkan id. Program batch kemudian menggemakan id, yang sekarang "Masukkan ID:", dan kemudian jalankanjstack Enter ID: > jstack.txt
Jstack sendiri menggemakan input, menemukan kesalahan dan meminta untuk mengakhiri.
Dan semua ini ditulis dalam file jstack.txt.
sumber
Tanda-tanda dolar di sekitar variabel tidak berfungsi pada mesin Vista saya, tetapi tanda-tanda persen berhasil. Perhatikan juga bahwa spasi tambahan pada baris "set" akan muncul di antara prompt dan input pengguna.
sumber
C:\>set /p DestPath="Type path:"
dan baris berikutnya adalahType path:c:\dddd
SETLOCAL ENABLEDELAYEDEXPANSION
dalam file batch Anda, Anda dapat menggunakan!EnvVariable!
untuk memperluas ke nilainya selama loop FOR, atau hal-hal lain yang tidak memperluas makro sampai baris benar-benar diproses oleh pengurai Cmd. Lihatcmd /?
informasi tentang ini, dan jugahelp setlocal
...Baru saja menambahkan
urutan ke pekerjaan batch netsh saya. Sekarang menunjukkan kepada saya lokasi saya merespons sebagai titik untuk sampel itu. Saya terus-menerus >> file output jadi saya tahu sekarang "home", "work", "Starbucks", dll. Mencari udara yang jernih, saya dapat meregulasi saluran dengan penggunaan terendah dan apakah ada 5 atau hanya semua WLAN 2,4 MHz di sekitar.
sumber
Hanya untuk menjaga nilai default variabel. Tekan Enter untuk menggunakan default dari menjalankan .bat baru-baru ini:
Dalam menjalankan pertama mengabaikan pesan tentang kurangnya file dengan nilai awal variabel (atau membuat Var1.txt secara manual).
sumber
(set /p var=<var1.txt) 2>nul
akan menekan errormessage. Anda juga dapat memberiset var1=default
alih-alih mendapatkan sesuatu dari file