Saya memiliki file batch yang merupakan pembungkus di sekitar installer. File batch ini memeriksa tingkat kesalahan yang dikembalikan oleh penginstal dan mencetak sesuai.
Saya perhatikan bahwa jika saya mengeksekusi set ERRORLEVEL=0
di prompt perintah tepat sebelum memulai file batch (di jendela perintah / lingkungan yang sama), installer tidak pernah mengacaukan tingkat kesalahan dan script batch saya selalu kembali berlalu. Saya akan berasumsi %ERRORLEVEL%
adalah variabel yang didefinisikan oleh Windows dan digunakan secara khusus untuk mencetak kesalahan dari program dan skrip dan bahwa menggunakan variabel dalam file batch atau sesuatu yang lain akan 'dengan risiko Anda sendiri' karena itu dapat diubah setiap saat dengan proses lain.
Dari apa yang tampak seperti, ketika saya mengatur errorlevel di lingkungan yang diberikan, itu kemudian entah bagaimana mengakhiri penggunaan errorlevel sebagai pemegang kode keluar. Adakah yang tahu mengapa ini terjadi? Bagi saya itu perilaku aneh yang tak terduga. Setiap informasi tentang masalah ini akan sangat dihargai!
sumber
&&
atau||
.Jawaban:
Anda mendefinisikan ulang variabel sistem menjadi variabel biasa. Ketika Anda melakukan ini, sistem tidak akan menggunakannya sampai sesi perintah ditutup.
Cara terbaik adalah menggunakan
dalam file batch lain dan panggil dari skrip utama Anda. Di mana angka 0 adalah yang Anda inginkan
errorlevel
. Entah itu atau gunakan perintah yang mengatur ulangerrorlevel
untuk Anda, seperti gema, findstr dll.Sebagai contoh, perintah-perintah berikut akan diatur
ERRORLEVEL
ke 0 dalam file-batch Anda:sumber
set "errorlevel="
errorlevel
variabel telah "secara manual" ditetapkan oleh pengguna / kelompok dengan"set errorlevel=0"
,errorlevel
variabel tidak akan lagi mencerminkan kode keluar, tetapi Anda masih dapat mengakses kode keluar denganif errorlevel do something
.cmd /c exit 42
tampaknya menjadi jawaban terbaik untuk itu. (2) Seperti yang ditunjukkan dbenham , Anda tidak memerlukan/b
atau kutipannya.Anda tidak boleh menetapkan nilai Anda sendiri ke variabel sistem dinamis seperti ERRORLEVEL, PATH, CD, DATE, TIME, dll. Melakukan hal itu akan mencegah kode melihat nilai dinamis. Anda dapat mengembalikan nilai dinamis dengan hanya membatalkan nilai yang ditentukan pengguna. Sebagai contoh:
Jika Anda ingin memaksa errorlevel ke 0, maka Anda dapat menggunakan sintaks benar-benar non-intuitif, tapi sangat efektif:
(call )
. Ruang setelah panggilan sangat penting. Jika Anda ingin mengatur tingkat kesalahan ke 1, Anda dapat menggunakan(call)
. Sangat penting bahwa tidak ada ruang setelah panggilan.Metode yang lebih intuitif, tetapi kurang nyaman untuk mengatur tingkat kesalahan adalah dengan menggunakan subrutin khusus dalam file batch:
Atau jika di baris perintah, Anda bisa menggunakan
sumber
Saya pribadi menggunakan ini:
cd .
Bekerja bahkan di shell unix.
sumber
type nul>nul
Karena Proses Monitor menunjukkanQueryDirectory
panggilan padacd .
PS:cd .
memiliki efek samping lain yang bagus di shell unix. Itu mengembalikan direktori kerja yang dibuat kembali di terminal jika telah dibuka sebelum menghapus.Berikut adalah beberapa cara lain untuk mengatur ulang
ErrorLevel
keadaan, yang bahkan berfungsi di MS-DOS (setidaknya untuk versi 6.22):Metode berikut ini hanya berfungsi dalam MS-DOS:
Demi kelengkapan, ini mengatur
ErrorLevel
keadaan1
, berlaku untuk Windows dan MS-DOS:sumber
Ini adalah satu-satunya hal yang menurut saya berhasil.
Membutuhkannya dalam skrip yang menggunakan skrip pihak ke-3 yang mendeteksi ERRORLEVEL, tetapi tidak menyetel ulang tingkat kesalahan sendiri dengan benar.
sumber
Ini juga akan berfungsi: (Setel tingkat kesalahan ke 1)
Metode 1
Metode 2
Anda juga dapat menggunakan ini untuk mengatur tingkat kesalahan 1-26:
sumber