node.js - 某些 windows 命令的 nodejs exec 命令失败,没有明确的错误消息
问题描述
我的程序中有一个编辑器,可以动态编写命令并执行它们。我想通过 child_process exec 将 myPublish 目录中的所有文件和文件夹移动到当前目录。我在 Windows 中使用 robocopy 命令。当我在 cmd 中测试 robocopy 时,它可以正常工作:
robocopy /s .\myPublish .\ /move
但在程序中,nodejs 给出了一条不清楚的错误消息,只是说:“命令失败:robocopy /s .\myPublish .\ /move\n”
解决方案
我也遇到了这个问题。虽然大多数控制台应用程序在没有错误时应该返回零退出代码,但 robocopy 有一系列自定义退出代码。这使得 Node 认为在执行过程中出现了错误,而实际上可能没有。
根据此处,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 的代码是更严重的错误。
推荐阅读
- excel - 如何根据单元格中的文本命名工作表?
- spring - 避免使用 If 语句来检查对象是否为 Null
- linux - 多线程对 IO 密集型任务没有帮助?
- wordpress - 在 wordpress 中归档文件
- xamarin.forms - 在 Xamarin Forms droid 上找不到错误资源
- graphviz - node-graphviz 不生成预期的 png 文件
- node.js - 找不到模块“地图缓存”
- node.js - 你会如何在 node.js 中调用这种函数?
- wordpress - 混合内容:“https://example.com”上的页面是通过 HTTPS 加载的,但在 Wordpress 站点中请求了不安全的样式表错误
- mysql - MariaDB 没有 ST_Distance_Sphere 的等效函数