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

在很多情况下,我们运行批处理只是执行一个例程,比如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 		// FILE, printf
#include 		// 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

你可能感兴趣的:(Visual,C++)