代码之家  ›  专栏  ›  技术社区  ›  Orion310591

从shellexecute中的cmd命令捕获errorlevel

  •  0
  • Orion310591  · 技术社区  · 7 年前

    我有一个批处理脚本,用于创建工作网络上大约30个位置的备份,它可以工作。 现在我正在编写同一个应用程序,但是在MFC VC++中,所以我使用小技巧来为字符串中的XCopy设置参数,然后执行它。 ShellExecute .

    m_destination 是来自editbox的变量,作为目标输入,文件的目的地。

    代码是:

    if (m_line1.GetCheck() == BST_CHECKED)
    {
        temp_dest = _T("/min /c xcopy \"\\\\pc_name.sub_domain.domain.local\\c$\\Users\\Test\\Desktop\\Test\\*.*\" \"") + m_destination + _T("\" /Y /E /Q");
        ShellExecute(
            GetSafeHwnd(),
            L"open",            // open edit print
            L"C:\\Windows\\System32\\cmd.exe", // FILE PATH,  
            temp_dest,          // PARAMETERS
            NULL,               // WORKING DIR
            SW_HIDE);           // WINDOW SHOW HIDE
        m_status = "Line 1 - OK\r\n";
    }
    

    上面的代码可以工作,但是有些情况下,当目标PC关闭时,在cmd窗口中,它会显示“路径已更改或目标无法访问”(类似的内容)。在这种情况下,%errorlevel%有一些值,如果复制成功,则有一些值。然后你有条件向用户触发不同的警告。 问题是,我不知道如何抓住它来表示复制不成功。

    我需要一些警告,从那台电脑复制是没有完成的。用这种方法复制后如何检索错误代码?

    或者,如果有一个简单的函数可以将copyx替换为(**(所有内容)复制,并且能够定向到特定的目录,那么我想听听它。

    提前谢谢。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Michael Gunter    7 年前

    我不认为有什么直接的方法 ShellExecute 因为它没有给你一个进程句柄。然而, ShellExecuteEx 是的,通过 hProcess 领域 SHELLEXECUTEINFO struct 你进来了。有了那个把手,你可以等( WaitForSingleObject 然后获取退出代码( GetExitCodeProcess ). 但是,您也可以通过一个简单的 CreateProcess . 阿尔索 SHFileOperation 支持一些类似xcopy的操作,并提供额外的编程控制。

    推荐文章