Saya menjalankan suatu program dan ingin melihat apa kode pengembaliannya (karena ia mengembalikan kode yang berbeda berdasarkan kesalahan yang berbeda).
Saya tahu di Bash saya bisa melakukan ini dengan berlari
echo $?
Apa yang saya lakukan ketika menggunakan cmd.exe di Windows?
app.exe & echo %errorlevel%
Jawaban:
Variabel lingkungan pseudo bernama
errorlevel
menyimpan kode keluar:Juga,
if
perintah memiliki sintaks khusus:Lihat
if /?
detailnya.Contoh
Peringatan: Jika Anda menetapkan nama variabel lingkungan
errorlevel
,%errorlevel%
akan mengembalikan nilai itu dan bukan kode keluar. Gunakan (set errorlevel=
) untuk menghapus variabel lingkungan, memungkinkan akses ke nilai sebenarnyaerrorlevel
melalui%errorlevel%
variabel lingkungan.sumber
echo Exit Code is $LastExitCode
%ERRORLEVEL%
0 meskipun terjadi kesalahan. Terjadi ketika memeriksa%ERRORLEVEL%
dalam file cmd. Berusahastart /wait
tidak berhasil. Satu-satunya hal yang berhasil adalahif errorlevel 1 (...)
string
bukanint
, yang berarti Anda tidak dapat menggunakanEQ
/NEQ
secara efektif.Pengujian
ErrorLevel
berfungsi untuk aplikasi konsol , tetapi seperti yang disarankan oleh dmihailescu , ini tidak akan berfungsi jika Anda mencoba menjalankan aplikasi berjendela (misalnya berbasis Win32) dari prompt perintah. Aplikasi berjendela akan berjalan di latar belakang, dan kontrol akan segera kembali ke command prompt (kemungkinan besar denganErrorLevel
nol untuk menunjukkan bahwa proses telah berhasil dibuat ). Ketika aplikasi berjendela akhirnya keluar, status keluarnya hilang.Alih-alih menggunakan peluncur C ++ berbasis konsol yang disebutkan di tempat lain, alternatif yang lebih sederhana adalah memulai aplikasi berjendela menggunakan perintah command prompt
START /WAIT
. Ini akan memulai aplikasi berjendela, menunggu aplikasi keluar, dan kemudian kembali kontrol ke prompt perintah dengan status keluar dari proses yang ditetapkanErrorLevel
.sumber
if
ataufor
. Pertimbangkan menggunakan!errorlevel!
sebagai gantinya, seperti yang dijelaskan dalam jawaban ini .Gunakan Variabel ERRORLEVEL bawaan:
Namun berhati-hatilah jika aplikasi telah mendefinisikan variabel lingkungan bernama ERRORLEVEL !
sumber
$LastExitCode
di PowerShell.Jika Anda ingin mencocokkan kode kesalahan dengan tepat (mis. Sama dengan 0), gunakan ini:
if errorlevel 0
pertandinganerrorlevel
> = 0. Lihatif /?
.sumber
Mungkin tidak berfungsi dengan benar ketika menggunakan program yang tidak terpasang ke konsol, karena aplikasi itu mungkin masih berjalan saat Anda berpikir Anda memiliki kode keluar. Solusi untuk melakukannya di C ++ terlihat seperti di bawah ini:
sumber
Perlu dicatat bahwa file .BAT dan .CMD beroperasi secara berbeda.
Membaca https://ss64.com/nt/errorlevel.html mencatat hal-hal berikut:
Ini membuat saya tidak berduka karena saya mengeksekusi perintah yang berurutan, tetapi ERRORLEVEL akan tetap tidak berubah bahkan jika terjadi kegagalan.
sumber
Pada satu titik, saya perlu mendorong peristiwa log secara akurat dari Cygwin ke Windows Event log. Saya ingin pesan dalam WEVL menjadi khusus, memiliki kode keluar yang benar, detail, prioritas, pesan, dll. Jadi saya membuat skrip Bash kecil untuk menangani hal ini. Ini dia di GitHub, logit.sh .
Beberapa kutipan:
Inilah bagian isi file sementara:
Berikut adalah fungsi untuk membuat acara di WEVL:
Menjalankan skrip batch dan memanggil __create_event:
sumber