用c++运行命令行

Run a command line with c++

本文关键字:命令行 运行 c++      更新时间:2023-10-16

我读过几篇关于在c++中运行命令行的文章,但是没有一篇能达到我的目的:当我使用dllfile时,在外部应用程序中没有显示控制台。

我的问题是:我想使用一个从数据库中挑选文件的进程。例如:获取文件XYZ。并将其复制到目录MyDirXYZ,我将使用命令行"MyDataGenerator XYZ。xyz C: MyDirXYZ"。

我使用Visual studio让我们用下面的例子来澄清这个问题,我试图在c++中用"mkdir"创建一个目录,而不使用CreateDirectory:

第一个方法:

std::string lDirectory("c:\MyDummyDir")
std::string lCmd("mkdir " + lDirectory);
system((lCmd).c_str());

它将工作,但是它显示控制台当我在Excel上运行dllfile时。

第二个方法(convertToRightFormat()将char转换为char)

    std::string lDirectory("c:\MyDummyDir")
    std::string lCmd("mkdir " + lDirectory);
    BOOL _status = TRUE;
    DWORD _reply, _code;
    STARTUPINFO _si = { sizeof(_si) };
    PROCESS_INFORMATION _pi;
    TCHAR *_cmd = NULL;
   _cmd=convertToRightFormat(lCmd.c_str())
   _status &= CreateProcess(NULL, _cmd, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &_si, &_pi);

这个方法不起作用(甚至不能创建文件夹),显然它也不能用于"MyDataGenerator"进程。

我尝试使用可执行MKDIR.EXE并将其放在命令行中。在这种情况下,它可以工作,但仍然不能为MyDataGenerator工作。

是否有一个通用的使所有命令行工作,而不显示控制台?

谢谢你。

#include <Windows.h> // FreeConsole, system
int main(int argc, char* argv[])
{   
    system("mkdir newdirectoryname");
    FreeConsole();
}

这将导致cmd在一瞬间弹出。之后就关门了。

如果这是不可接受的,只是针对窗口子系统,而不是控制台,并确保不绘制窗口。