关于diskpart的命令问题记录

本文介绍如何通过创建bat批处理文件并结合使用diskpart命令行工具来实现虚拟硬盘的挂载操作。由于diskpart不支持使用&来串联多条指令,故采用外部批处理的方式解决此限制。文中提供了具体的bat文件示例,并分享了三种在C++中调用bat文件的方法。

经过测试,得知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.youkuaiyun.com/lwx309025167/article/details/78282114

https://blog.youkuaiyun.com/jeakon/article/details/8544964

https://blog.youkuaiyun.com/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);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Charles技术成长之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值