Команда nodejs exec не выполняется для некоторых команд Windows без четкого сообщения об ошибке

У меня есть редактор в моей программе, я динамически пишу команды и выполняю их. Я хочу переместить все файлы и папки в каталоге myPublish в текущий каталог с помощью child_process exec. Я использую команду robocopy в Windows. когда я тестирую robocopy в cmd, он работает правильно:

robocopy /s .\myPublish .\ /move

но в программе nodejs выдает непонятное сообщение об ошибке, которое просто говорит: "Команда не выполнена: robocopy /s .\myPublish .\ /move\n"

Команда не выполнена для робокопии

0 ответов

Я только что столкнулся с этой проблемой. В то время как большинство консольных приложений должны возвращать нулевой код выхода при отсутствии ошибок, 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 более серьезной ошибкой.

Другие вопросы по тегам