Saya punya Windows .bat file yang saya ingin menerima input pengguna dan kemudian menggunakan hasil dari masukan itu sebagai bagian dari panggilan untuk perintah tambahan.
Sebagai contoh, saya'd seperti untuk menerima proses ID dari user, dan kemudian jalankan jstack terhadap ID tersebut, menempatkan hasil jstack call ke sebuah file. Namun, ketika saya mencoba ini, itu doesn't bekerja.
Berikut ini's my sampel kelelawar isi file:
@echo off
set /p id=Enter ID:
echo %id%
jstack > jstack.txt
dan berikut's apa yang muncul di jstack.txt:
Masukkan ID: Menghentikan pekerjaan batch (Y/N)?
Coba ini:
@echo off
set /p id="Enter ID: "
Anda kemudian dapat menggunakan %id%
sebagai parameter untuk file batch lain seperti jstack %id%
.
Misalnya:
set /P id=Enter id:
jstack %id% > jstack.txt
Sintaks seperti ini: set /p variabel=[string]
Check out http://commandwindows.com/batch.htm atau http://www.robvanderwoude.com/userinput.php untuk lebih jauh menyelam ke input pengguna dengan versi yang berbeda dari OS Windows batch file.
Setelah anda telah mengatur variabel anda, maka anda dapat pergi tentang menggunakan dengan cara berikut.
@echo off
set /p UserInputPath=What Directory would you like?
cd C:\%UserInputPath%
catatan %VariableName%
sintaks
Saya tidak yakin jika ini adalah kasus untuk semua versi Windows, namun pada mesin XP yang saya miliki, saya perlu menggunakan kode berikut:
set /p Var1="Prompt String"
Tanpa prompt string di kutipan, saya mendapatkan berbagai hasil tergantung pada teks.
set /p choice= "Please Select one of the above options :"
echo '%choice%'
Ruang setelah =
adalah sangat penting.
@echo off
set /p input="Write something, it will be used in the command "echo""
echo %input%
pause
jika aku mendapatkan apa yang anda inginkan, ini bekerja dengan baik. anda dapat menggunakan %input% dalam perintah lain juga.
@echo off
echo Write something, it will be used in the command "echo"
set /p input=""
cls
echo %input%
pause
Tidak ada didokumentasikan /prompt parameter untuk SETX ada untuk MENGATUR.
Jika anda perlu untuk meminta untuk variabel lingkungan yang akan bertahan reboot, anda dapat menggunakan SETX ke toko itu.
Variabel yang dibuat oleh SETX won't dapat digunakan sampai anda me-restart command prompt. Rapi, namun, anda dapat SETX variabel yang sudah DITETAPKAN, bahkan jika itu memiliki nama yang sama.
Ini bekerja untuk saya di Windows 8.1 Pro:
set /p UserInfo= "What is your name? "
setx UserInfo "%UserInfo%"
(Dalam tanda kutip ada variabel yang diperlukan.)
Prosedur ini memungkinkan anda untuk menggunakan sementara yang dibuat variabel selama sesi saat ini dan akan memungkinkan anda untuk menggunakan kembali SETX-dibuat variabel pada saat reboot komputer atau restart dari CMD prompt.
(Diedit untuk kode format paragraf dengan benar.)
@echo off
:start
set /p var1="Enter first number: "
pause
Ada dua kemungkinan.
%id%
di jstack
call. jstack %id% > jstack.txt
Sehingga seluruh memperbaiki batch file harus:
@echo off
set /p id=Enter ID:
echo %id%
jstack %id% > jstack.txt
Dan/Atau 2. Anda tidak memasukkannya ke dalam kode (dan lupa untuk memberitahu kami dalam pertanyaan), tetapi ketika anda menjalankan file batch anda tekan Enter, bukan mengetik ID (katakanlah 1234).
Apa's terjadi adalah hasil dari dua kesalahan:
jstack
seharusnya yang disebut dengan id yang anda berikan itu.
Tapi dalam kasus anda (sesuai dengan kode yang anda masukkan dalam pertanyaan) anda menyebutnya tanpa variabel. Anda menulis:
jstack > jstack.txt
Jadi, ketika anda menjalankan jstack
dengan tidak ada variabel output berikut:
Terminate batch file Y/N?
Kesalahan kedua adalah bahwa anda menekan Enter, alih-alih memberikan nilai saat program meminta anda: Masukkan ID:
. Jika anda akan dimasukkan ke dalam ID pada titik ini, mengatakan 1234, the %id%
variabel akan menjadi nilai tersebut, dalam kasus kami 1234. Tapi anda TIDAK menyediakan nilai dan bukan ditekan Enter. Ketika anda don't memberikan variabel nilai apapun, dan jika variabel tersebut tidak diatur ke sesuatu yang lain sebelumnya, maka variabel %id%
diatur ke prompt set
komando!! Jadi sekarang %id%
diatur Masukkan ID:
yang menggema di layar anda seperti yang diminta dalam batch file SEBELUM anda disebut jstack.
Tapi saya menduga anda TIDAK memiliki jstack %id% > jstack.txt
dalam berkas batch code dengan %id
(dan dihilangkan oleh kesalahan dari pertanyaan), dan bahwa anda menekan enter tanpa mengetik di id. Program batch kemudian bergema id, yang sekarang "Masukkan ID:", dan kemudian berlari jstack Masukkan ID: > jstack.txt
Jstack itu sendiri bergema input, ditemui kesalahan dan diminta untuk menghentikan. Dan semua ini ditulis dalam jstack.txt file.
Saya memiliki sedikit cmd yang saya gunakan ketika mempersiapkan pc untuk klien: ini panggilan pengguna untuk input, dan mengubah nama pc untuk itu.
@ECHO "remember to run this as admin."
@ECHO OFF
SET /P _inputname= Please enter an computername:
@ECHO Du intastede "%_inputname%"
@ECHO "The pc will restart after this"
pause
@ECHO OFF
wmic computersystem where name="%COMPUTERNAME%" call rename name="%_inputname%"
shutdown -r -f
Hanya menambahkan
set /p NetworkLocation= Enter name for network?
echo %NetworkLocation% >> netlist.txt
urutan ke saya netsh pekerjaan batch. Sekarang menunjukkan lokasi saya merespon sebagai titik untuk itu sampel. Saya terus-menerus >> output file jadi aku tahu sekarang "rumah", "pekerjaan", "Starbucks", dll. Mencari udara yang jelas, saya dapat eavulate terendah menggunakan saluran dan apakah ada 5 atau hanya 2,4 MHz Wlan sekitar.
Hanya untuk menjaga nilai default dari variabel. Tekan Enter untuk menggunakan default dari baru anda .kelelawar:
@echo off
set /p Var1=<Var1.txt
set /p Var1="Enter new value ("%Var1%") "
echo %Var1%> Var1.txt
rem YourApp %Var1%
Dalam menjalankan pertama hanya mengabaikan pesan tentang kekurangan berkas dengan nilai awal dari variabel (atau membuat Var1.txt secara manual).