用C++运行批处理文件或是批处理命令的简单方式

记得以前用过ShellExecute运行过批处理文件,不过控制起来不够细致。今天在做程序的时候发现CreateProcess也能实现对批处理文件的启动,或是直接运行批处理命令。

以下代码可以启动cmd文件:

BOOL CautobuiltView::RunCmdFile(LPCTSTR lpstrCmd)
{
 PROCESS_INFORMATION pi;
 STARTUPINFO si;
 ZeroMemory(&si,sizeof(si));
 si.cb = sizeof(si);
 si.hStdInput=GetStdHandle(STD_INPUT_HANDLE);
 if(!CreateProcess(NULL,
  (LPTSTR)lpstrCmd,
  NULL,
  NULL,
  FALSE,
  NULL,
  NULL,
  NULL,
  &si,&pi))
 {
  AfxMessageBox("不能创建进程");
 }
 else
 {
  WaitForSingleObject(pi.hProcess,INFINITE);
  CloseHandle(pi.hProcess);
  CloseHandle(pi.hThread);
 }
 return TRUE;
}

void testcmdfile()
{
 CString strformat = "c:\autobuilt\debug\pack.bat c:\autobuilt\debug\cabwiz.exe c:\autobuilt\debug\iviewer.inf F:\CurRel"
  RunCmdFile((LPCTSTR)strformat);
}

 

 

以下代码可以直接调用cmd命令,而无需通过*.bat文件执行。

testCmdCommandLine()
{
 char szCmd[256] = {0};
 //删除d盘中的文件夹new1及其子文件夹中所有内容
 sprintf(szCmd, "%s%s","cmd.exe /k rmdir /s /q ","d:\\new1");
 RunCmdCommandLine(szCmd);
}
BOOL RunCmdCommandLine(LPCTSTR lpstrCmd)
{
 STARTUPINFO si = {0};
 si.cb = sizeof(si);
 si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
 si.hStdError = (HANDLE)2;
 si.hStdInput = (HANDLE)0;
 si.hStdOutput = (HANDLE)1;
 // si.wShowWindow = SW_HIDE;
 PROCESS_INFORMATION pi;
 CreateProcess(
  0,
  (LPSTR)lpstrCmd,
  0,
  0,
  TRUE,
  0,
  0,
  0,
  &si, &pi);

 return TRUE;
}

学c/c++来vc180中文网www.vc180.com

原文链接: https://www.cnblogs.com/fengji/archive/2010/06/14/1758280.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    用C++运行批处理文件或是批处理命令的简单方式

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/11820

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 上午10:32
下一篇 2023年2月7日 上午10:35

相关推荐