【问题标题】:nodejs exec command fails for some windows commands with no clear error message某些 windows 命令的 nodejs exec 命令失败,没有明确的错误消息
【发布时间】:2019-03-15 04:04:55
【问题描述】:

我的程序中有一个编辑器,可以动态编写命令并执行它们。我想通过 child_process exec 将 myPublish 目录中的所有文件和文件夹移动到当前目录。我在 Windows 中使用 robocopy 命令。当我在 cmd 中测试 robocopy 时,它可以正常工作:

robocopy /s .\myPublish .\ /move

但是在程序中,nodejs 给出了一个不清楚的错误消息,它只是说: “命令失败:robocopy /s .\myPublish .\ /move\n”

【问题讨论】:

    标签: node.js child-process


    【解决方案1】:

    我也遇到了这个问题。虽然大多数控制台应用程序在没有错误时应该返回零退出代码,但 robocopy 有一系列自定义退出代码。这使得 Node 认为执行过程中出现了错误,而实际上可能没有。

    根据here,Robocopy 具有以下组成退出代码的退出代码位:

    0×10 严重错误。 Robocopy 没有复制任何文件。这可能是使用错误,也可能是由于对源目录或目标目录的访问权限不足而导致的错误。

    0×08 部分文件或目录无法复制(复制出错,超出重试限制)。进一步检查这些错误。

    0×04 检测到一些不匹配的文件或目录。检查输出日志。家政服务可能是必要的。

    0×02 检测到一些额外的文件或目录。检查输出日志。可能需要一些家政服务。

    0×01 一个或多个文件复制成功(即新文件到了)。

    0×00 没有发生错误,也没有进行复制。源目录树和目标目录树完全同步。

    要解决此问题,您需要捕获错误并检查错误代码:

    const cp = require('child_process');
    try { 
        cp.execSync('robocopy ...'); 
    } catch (err) { 
        console.log(err.status);             // get the return code
        console.log(err.output.toString());  // get robocopy's full output
    }
    

    我认为您通常会认为大于 8 的代码是更严重的错误。

    【讨论】:

    猜你喜欢
    • 2012-12-28
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    相关资源
    最近更新 更多