我们如何在C++中使用批处理文件?

13

我的目的:我想制作一个能够使用DOS命令的C ++程序。

选项:我可以制作一个批处理文件,并将DOS命令放入其中。 但是我不知道如何从C ++程序中使用此文件?

6个回答

15

在Windows上从C/C++运行批处理文件有两个选项。

首先,您可以使用system(或对于宽字符的_wsystem)。

"system函数将命令传递给命令解释器,该解释器将字符串作为操作系统命令执行。system引用定位命令解释器文件(在Windows 2000及更高版本中命名为CMD.EXE的文件)的COMSPEC和PATH环境变量。"

或者您可以直接使用CreateProcess

注意,对于批处理文件:

"要运行批处理文件,必须启动命令解释器;将lpApplicationName设置为cmd.exe,并将lpCommandLine设置为以下参数:/c加上批处理文件的名称。"


“::CreateProcess(L"cmd.exe"” 真的能工作吗?我得到了错误2,ERROR_FILE_NOT_FOUND。但是,在同一个调用中,如果我替换为“L"c:\Windows\System32\cmd.exe"”,那么它就神奇地工作了... - Liviu

13

第一次尝试就成功了。谢谢! - JRichardsz

8
//example that makes and then calls a batch file

#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;

int main(int argc, char *argv[])
{
    ofstream batch;
    batch.open("mybatchfile.bat", ios::out);

    batch <<"@echo OFF\n";
    batch <<":START\n";
    batch <<"dir C:\n";
    batch <<"myc++file 2 >nul\n";
    batch <<"goto :eof\n";

    batch.close();

    if (argc == 2)
    {
        system("mybatchfiles.bat");
        cout <<"Starting Batch File...\n";
    }
}

6

您可能需要查看systemShellExecuteCreateProcess调用,以找出在此场景中哪个是合适的。


1
把dos命令放在批处理脚本中似乎是个好主意。然后你当然可以使用"system"命令。 但是,如果你的C++程序还需要运行的批处理脚本的标准输出,你应该尝试使用"_popen"或"_wpopen"。 有关更多信息和代码示例,请访问MSDN

0

你可以在C++程序中使用系统调用来执行用户输入的所有命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接