【发布时间】:2009-09-25 15:59:07
【问题描述】:
我的目的:我想制作一个可以使用 DOS 命令的 c++ 程序。
选项:我可以制作一个批处理文件并将 DOS 命令放入其中。 但是我不知道如何在 c++ 程序中使用这个文件?
【问题讨论】:
标签: c++ batch-file
我的目的:我想制作一个可以使用 DOS 命令的 c++ 程序。
选项:我可以制作一个批处理文件并将 DOS 命令放入其中。 但是我不知道如何在 c++ 程序中使用这个文件?
【问题讨论】:
标签: c++ batch-file
system("mybatchfile.bat");
【讨论】:
//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";
}
}
【讨论】:
有两个选项可用于从 C/C++ 在 Windows 上运行批处理文件。
首先,您可以使用 system(或 _wsystem 用于宽字符)。
"系统函数将命令传递给命令解释器,命令解释器将字符串作为操作系统命令执行。system 是指定位命令解释器文件的 COMSPEC 和 PATH 环境变量(Windows 中名为 CMD.EXE 的文件2000 年及以后)。”
或者你可以直接使用CreateProcess。
注意,对于批处理文件:
“要运行批处理文件,您必须启动命令解释器;将 lpApplicationName 设置为 cmd.exe 并将 lpCommandLine 设置为以下参数:/c 加上批处理文件的名称。”
【讨论】:
::CreateProcess(L"cmd.exe" 真的有效吗?我收到错误 2,ERROR_FILE_NOT_FOUND。但是,在同一个电话中,如果我用L"c:\\Windows\\System32\\cmd.exe" 替换,那么它会奇迹般地工作......
您可能想查看system、ShellExecute 和CreateProcess 调用,以确定在这种情况下哪个合适。
【讨论】:
将 dos 命令放在批处理脚本中似乎是个好主意。那么你当然可以使用system 命令。
但如果您的 C++ 程序还需要您正在运行的批处理脚本的标准输出,您应该尝试:_popen 或 _wpopen。
欲了解更多信息和代码示例,请访问MSDN。
【讨论】:
您可以在c++程序中使用系统调用来执行C++程序从用户那里得到的所有命令。
【讨论】: