使用c ++运行命令行

时间:2016-09-12 13:55:04

标签: c++ windows command-line

我已经阅读了几篇关于在c ++中运行命令行的帖子,但是没有一篇文章符合我的要求:当我使用dll文件时,没有在外部应用程序中显示控制台。

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

我使用Visual Studio 让我们通过以下示例来澄清问题,我正在尝试使用" mkdir"创建一个目录。在C ++中,不使用CreateDirectory:

第一种方法:

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

当我在Excel上使用dllfile运行它时,它会工作,但会显示控制台

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

    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。

是否存在使所有命令行都可以工作的通用,而不显示控制台?

谢谢你。

1 个答案:

答案 0 :(得分:0)

#include <Windows.h> // FreeConsole, system

int main(int argc, char* argv[])
{   
    system("mkdir newdirectoryname");
    FreeConsole();
}

这会导致cmd弹出一瞬间。之后关闭。

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