Saya perlu menetapkan output suatu program ke variabel menggunakan file batch MS.
Jadi di GNU Bash shell saya akan gunakan VAR=$(application arg0 arg1)
. Saya perlu perilaku serupa di Windows menggunakan file batch.
Sesuatu seperti set VAR=application arg0 arg1
.
batch-file
cmd
variable-assignment
windows-console
initialZero
sumber
sumber
for /f "tokens=3" %%i in ('route print ^| findstr "\<0.0.0.0\>"') do set "myVar=%%i"
Sebagai tambahan untuk jawaban sebelumnya , pipa dapat digunakan di dalam pernyataan for, diloloskan dengan simbol tanda sisipan:
sumber
for /f "tokens=*" %i in ('tasklist ^| findstr explorer') do @echo %i
Tetapi secara umum,usebackq
harus digunakan untuk menangani perintah yang kompleks.for /f "tokens=*" %%i in ('"tasklist | grep explorer"') do set VAR=%%i
. Lebih mudah bagi saya jika tidak ada tanda kutip di perintah itu sendiri.@OP, Anda dapat menggunakan loop untuk menangkap status pengembalian program Anda, jika menghasilkan sesuatu selain angka
sumber
dengan asumsi bahwa output aplikasi Anda adalah kode pengembalian numerik, Anda dapat melakukan hal berikut
sumber
Sedang Dieksekusi:
for /f %%i in ('application arg0 arg1') do set VAR=%%i
saya mendapatkan kesalahan: %% saya tidak terduga saat ini. Sebagai perbaikan, saya harus menjalankan di atas sebagaifor /f %i in ('application arg0 arg1') do set VAR=%i
sumber
%%
dan di luar file batch pada baris perintah yang Anda butuhkan%
Selain jawabannya, Anda tidak bisa langsung menggunakan operator redirection output dalam set bagian dari
for
lingkaran (misalnya jika Anda ingin menyembunyikan keluaran stderror dari pengguna dan memberikan pesan kesalahan yang lebih baik). Sebaliknya, Anda harus melarikan diri dari mereka dengan karakter tanda sisipan (^
):Referensi: Redirect output dari perintah untuk loop script batch
sumber
sumber
Anda bisa menggunakan kumpulan makro untuk menangkap sederhana output perintah, sedikit seperti perilaku bash shell.
Penggunaan makro sederhana dan terlihat seperti
Dan itu bekerja bahkan dengan pipa
Makro menggunakan variabel seperti array dan menyimpan setiap baris dalam indeks terpisah.
Dalam sampel
%$set% allDrives="wmic logicaldisk
akan ada variabel-variabel berikut dibuat:Untuk menggunakannya, tidak penting untuk memahami cara kerja makro itu sendiri.
Contoh lengkap
sumber
Saya menulis skrip yang ping google.com setiap 5 detik dan mencatat hasil dengan waktu saat ini. Di sini Anda dapat menemukan output ke variabel "commandLineStr" (dengan indeks)
sumber