对于某些Windows命令,nodejs exec命令失败,并且没有明确的错误消息

时间:2018-10-10 09:27:16

标签: node.js child-process

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

robocopy /s .\myPublish .\ /move

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

Command failed for robocopy

1 个答案:

答案 0 :(得分:1)

我也刚遇到这个问题。尽管大多数控制台应用程序在没有错误的情况下应返回零退出代码,但robocopy具有一系列自定义退出代码。这使Node认为执行期间可能有错误,而可能没有。

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

  

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

     

0×08无法复制某些文件或目录(发生复制错误并且超出了重试限制)。进一步检查这些错误。

     

0×04检测到一些不匹配的文件或目录。检查输出日志。客房清洁可能是必要的。

     

0×02检测到某些Extra文件或目录。检查输出日志。可能需要一些客房清洁服务。

     

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的代码是更严重的错误。