[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[讨论]浅谈批处理中的%errorlevel%

#浅谈%errorlevel%#

对于%errorlevel%环境变量,大家想必是既熟悉又陌生吧。知道有这个东西的存在,但是不常用。
下面我将谈谈我对这个变量的见解,有错误请指正!

微软的Windows NT系列系统,主要是用C/C++语言写的,部分用汇编。(到了VISTA以后用的语言比较多,.NET框架占比重也比较大。)
它的命令行工具也差不多,大多是C/C++写的,部分是汇编写的(后缀是.com的文件)。

C/C++语言是写命令行工具的利器,一方面,它的语言效率高那是毫无疑问的,可以说仅次于汇编;另一方面,Windows系统提供了很多控制台程序的接口,C/C++语言可以方便的调用。

现在交代了下背景,其他废话就不多说了。
每个C/C++语言程序都有一个“主函数mian()”,下面我列举一个最简单的C/C++语言程序,后面那些是注释:
  1. #include<stdio.h>  //包含一个函数库,此句不用理解,略过
  2. int main()   //主函数,前面的 int 指这个函数有有整数的返回值
  3. {
  4.     int i;    //定义一个变量i,这个好理解
  5.     printf("请输入一个整数:")    //此句相当于批处理的 echo
  6.     scanf("%d",&i);  //用户输入 i 值,必须为数字
  7.     if(i==1)   //if语句大家都懂吧?
  8.     {
  9.            return 1;   // 前面我提到过了,main()是一个有返回值的函数
  10.                           //  这里的 return 就是返回语句,这句即为返回整数1
  11.     } else {
  12.            return 0;  //  返回整数0
  13.     }
  14. }
复制代码
代码写好了,找个工具编译,链接后,就可以得到我们的程序了,在CMD下运行,程序名为CPP.EXE:
  1. C:\Users\Broly\Desktop\VC>CPP.exe
  2. 请输入一个整数:0
  3. C:\Users\Broly\Desktop\VC>echo %errorlevel%
  4. 0
  5. C:\Users\Broly\Desktop\VC>CPP.exe
  6. 请输入一个整数:1
  7. C:\Users\Broly\Desktop\VC>echo %errorlevel%
  8. 1
  9. C:\Users\Broly\Desktop\VC>CPP.exe
  10. 请输入一个整数:2
  11. C:\Users\Broly\Desktop\VC>echo %errorlevel%
  12. 0
  13. C:\Users\Broly\Desktop\VC>CPP.exe
  14. 请输入一个整数:3
  15. C:\Users\Broly\Desktop\VC>echo %errorlevel%
  16. 0
  17. C:\Users\Broly\Desktop\VC>CPP.exe
  18. 请输入一个整数:4
  19. C:\Users\Broly\Desktop\VC>echo %errorlevel%
  20. 0
复制代码
大家发现什么没?没发现的,你再看看源代码中的 if 语句。
我的理解为:当一个程序运行完成后,main()函数的返回值会临时保存在 %errorlevel% 变量中。
这就是 %errorlevel% 为什么每个程序运行后都不一定相同的原因。
不过根据经验,一般C/C++语言程序,如果程序没有运行异常的话都会返回一个 0 值,即 return 0;否则将返回一个非零值。
%errorlevel% 具体取值还是要看写程序那个人如何取舍。
而且,不是每个程序都是C语言写的,也不是每个C语言程序都有返回值或者返回为整数。
我个人猜测,没有返回值的程序,%errorlevel% 的值将会是 0 。(由于时间关系我不想去实践,有兴趣的同学可以试试,最后把结果贴上来分享)
废话多了点,大家别见怪。
1

评分人数

---学无止境---

3# powerbat

void main()
无返回值
---学无止境---

TOP

5# powerbat


C++语法是那么说明的,你要是认为不对可以去找定义这套标准的人理论,跟我说没用。
---学无止境---

TOP

5# powerbat


我说,你是不是我理解错了我的意思,还是我理解错了你的意思??
---学无止境---

TOP

8# powerbat

你用此格式造句:
如 int test();   test是返回值为int在函数

平时你怎么说void test();的?

这个是一个平常在叫法,void是无返回值


void main()的真实返回值是编译器给填上在。但我们平时怎么称呼这个函数的?请再看7L
---学无止境---

TOP

嗯,集思广义。有讨论才有进步。希望以后都能这样
---学无止境---

TOP

返回列表