您的位置:首页 > 其它

关于BAT(CMD命令行批处理)如何获得返回值(进程退出码)的问题

2016-01-09 20:34 751 查看
在很多情况下,我们运行批处理只是执行一个例程,比如cls

然而在某些情况下,我们需要知道程序执行的确切结果,比如安装补丁,驱动等等

在WIN32编程中,可以使用CreateProcess得到进程的退出码

多线程编程可以使用GetExitCodeThread等获得线程退出码,不再赘述

而CMD命令行及其BAT批处理中,多数的文档只介绍了参数,而不太注重结果

我们该如何得到批处理执行某个程序的结果呢?

其实就一个ERRORLEVEL 关键字

以下代码演示如何获得程序的退出码(Exit code)

// ****************************************************************************************************
// 文件: ReturnToConsole\\main.cpp
// 作者: 虎胆游侠(blog.csdn.net/prsniper; cto@renshenguo.com)
// 时间: 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;
}

运行程序会在目录下产生一个bat文件,运行该文件查看效果
如果是在VS6 IDE下会自动转Debug目录下,可以在工程中设置:Project >> Settings >> Debug >> Program Arguments
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: