
[討論]淺談批處理中的%errorlevel%#淺談%errorlevel%#對于%errorlevel%環境變量,大家想必是既熟悉又陌生吧。知道有這個東西的存在,但是不常用。下面我將談談我對這個變量的見解,有錯誤請指正!微軟的Windows NT系列系統,主要是用C/C++語言寫的,部分用匯編。(到了VISTA以后用的語言比較多,.NET框架占比重也比較大。)它的命令行工具也差不多,大多是C/C++寫的,部分是匯編寫的(后綴是.com的文件)。C/C++語言是寫命令行工具的利器,一方面,它的語言效率高那是毫無疑問的,可以說僅次于匯編;另一方面,Windows系統提供了很多控制臺程序的接口,C/C++語言可以方便的調用。現在交代了下背景,其他廢話就不多說了。每個C/C++語言程序都有一個“主函數mian()”,下面我列舉一個最簡單的C/C++語言程序,后面那些是注釋:
代碼寫好了,找個工具編譯,鏈接后,就可以得到我們的程序了,在CMD下運行,程序名為CPP.EXE:nclick="copycode($('code0'));">復制代碼
- #include<stdio.h>//包含一個函數庫,此句不用理解,略過
- int main() //主函數,前面的 int 指這個函數有有整數的返回值
- {
- int i;//定義一個變量i,這個好理解
- printf(請輸入一個整數:)//此句相當于批處理的 echo
- scanf(%d,&i);//用戶輸入 i 值,必須為數字
- if(i==1) //if語句大家都懂吧?
- {
- return 1; // 前面我提到過了,main()是一個有返回值的函數
- //這里的 return 就是返回語句,這句即為返回整數1
- } else {
- return 0;//返回整數0
- }
- }
大家發現什么沒?沒發現的,你再看看源代碼中的 if 語句。我的理解為:當一個程序運行完成后,main()函數的返回值會臨時保存在 %errorlevel% 變量中。這就是 %errorlevel% 為什么每個程序運行后都不一定相同的原因。不過根據經驗,一般C/C++語言程序,如果程序沒有運行異常的話都會返回一個 0 值,即 return 0;否則將返回一個非零值。%errorlevel% 具體取值還是要看寫程序那個人如何取舍。而且,不是每個程序都是C語言寫的,也不是每個C語言程序都有返回值或者返回為整數。我個人猜測,沒有返回值的程序,%errorlevel% 的值將會是 0 。(由于時間關系我不想去實踐,有興趣的同學可以試試,最后把結果貼上來分享)廢話多了點,大家別見怪。nclick="copycode($('code1'));">復制代碼
- C:UsersBrolyDesktopVC>CPP.exe
- 請輸入一個整數:0
- C:UsersBrolyDesktopVC>echo %errorlevel%
- 0
- C:UsersBrolyDesktopVC>CPP.exe
- 請輸入一個整數:1
- C:UsersBrolyDesktopVC>echo %errorlevel%
- 1
- C:UsersBrolyDesktopVC>CPP.exe
- 請輸入一個整數:2
- C:UsersBrolyDesktopVC>echo %errorlevel%
- 0
- C:UsersBrolyDesktopVC>CPP.exe
- 請輸入一個整數:3
- C:UsersBrolyDesktopVC>echo %errorlevel%
- 0
- C:UsersBrolyDesktopVC>CPP.exe
- 請輸入一個整數:4
- C:UsersBrolyDesktopVC>echo %errorlevel%
- 0

