在很多情况下,我们运行批处理只是执行一个例程,比如cls
然而在某些情况下,我们需要知道程序执行的确切结果,比如安装补丁,驱动等等
在WIN32编程中,可以使用CreateProcess得到进程的退出码
多线程编程可以使用GetExitCodeThread等获得线程退出码,不再赘述
而CMD命令行及其BAT批处理中,多数的文档只介绍了参数,而不太注重结果
我们该如何得到批处理执行某个程序的结果呢?
其实就一个ERRORLEVEL 关键字
以下代码演示如何获得程序的退出码(Exit code)
// **************************************************************************************************** // 文件: ReturnToConsole\\main.cpp // 作者: 虎胆游侠(blog.csdn.net/prsniper; [email protected]) // 时间: 2016-01-09 12:12:05 // 注释: // 控制台返回值示例程序 // **************************************************************************************************** #include <stdio.h> // FILE, printf #include <stdlib.h> // atoi #define ERR_SUCCESS 0 #define ERR_FAILURE 1 void fnCreateBatch(const char *szFile) { FILE *pf = fopen(szFile, "rb"); if(pf == NULL) { pf = fopen(szFile, "wb"); if(pf == NULL) { return; } fprintf(pf, "@echo off\r\n"); fprintf(pf, "ReturnToConsole.exe 100\r\n"); fprintf(pf, "if ERRORLEVEL 100 (\r\n"); fprintf(pf, "echo \"return value >= 100.\"\r\n"); fprintf(pf, ") else if ERRORLEVEL 0 (\r\n"); fprintf(pf, "echo \"return value >= 0.\"\r\n"); fprintf(pf, ")\r\n"); fprintf(pf, "pause\r\n"); } fclose(pf); pf = NULL; } int main(int argc, char **argv) { int dwRet; if(argc <= 1) { printf("USAGE:\r\n"); printf("ReturnToConsole[.exe] value[ /d]\r\n"); //printf("Press any key to continue:"); //getchar(); return ERR_SUCCESS; } if(argc > 2) { // debug project config: /d fnCreateBatch("Debug\\demo.bat"); }else { fnCreateBatch("demo.bat"); } dwRet = atoi(argv[1]); printf("PRINT FROM EXE: arg1 = %d.\r\n", dwRet); return dwRet; }
如果是在VS6 IDE下会自动转Debug目录下,可以在工程中设置:Project >> Settings >> Debug >> Program Arguments