关于diskpart的命令问题记录

经过测试,得知diskpart并不像cmd那样支持使用&来执行多条指令,如果单纯的想使用&,例如

QString strAttachCmd = "select vdisk file=d:\\test\\test.vhd \
    & attach vdisk \
    & exit";
    HINSTANCE hresult = ShellExecuteA(NULL, "open", "diskpart.exe", strAttachCmd.toLocal8Bit().constData(), NULL, SW_HIDE);    

是注定失败的。

需要使用bat批处理的方式来。例如想实现上面的功能,可以创建一个attachvhd.bat和attachvhd.txt

attachvhd.bat内容为:

diskpart /s attachvhd.txt

attachvhd.txt内容为:

select vdisk file="d:\\test\\test.vhd"
attach vdisk
exit

注意路径和名称不要错误了。然后双击运行attachvhd.bat即可。

关于在c++中调用bat,参考以下网站:

https://blog.csdn.net/lwx309025167/article/details/78282114

https://blog.csdn.net/jeakon/article/details/8544964

https://blog.csdn.net/oilcode/article/details/50320147

避免网站打不开,总结以下:

方法1、system("attachvhd.bat"); system是C标准库中的函数。

方法2、WinExec("attachvhd.bat", SW_HIDE); WinExec是 Windows.h 中的函数。

方法3、 

PROCESS_INFORMATION pi;
    STARTUPINFO si;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
    if (CreateProcess(L"RUN_TEST.bat",// RUN_TEST.bat位于工程所在目录下
        NULL,
        NULL,
        NULL,
        FALSE,
        CREATE_NO_WINDOW,// 这里不为该进程创建一个控制台窗口
        NULL,
        NULL,
        &si, &pi))
    {
        WaitForSingleObject(pi.hProcess, INFINITE);// 等待bat执行结束
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
    }

猜你喜欢

转载自blog.csdn.net/caokunchao/article/details/81944574