node.js 7zip exec(Синхронизация) архив не создан?

#javascript #node.js #command-line-interface #7zip

#javascript #node.js #интерфейс командной строки #7zip

Вопрос:

У меня есть следующий js-код, который должен добавить все файлы в текущем каталоге в архив 7z:

 "use strict";
const { execSync } = require("child_process");
process.chdir("C:\Program Files\7-Zip\");

let clicommand = "7z a Files.7z "   __dirname   "\ *.* -r";

execSync(clicommand, (error) => {
  if (error) {
    console.log(`error: ${error.message}`);
    return;
  }
});

console.log("Current dir: "   __dirname);
console.log("clicommand : "   clicommand);
 

Если запустить его из окна терминала в VS Code.
Он что-то делает в течение секунды или около того, затем распечатывает:

 Current dir: D:nodenode_http_server
clicommand : 7z a Files.7z D:nodenode_http_server *.* -r
 

Но zip-архив не создается в D:nodenode_http_server .
Запуск команды

 "C:Program Files7-Zip7z.exe" a Files.7z *.* -r 
 

непосредственно из консоли работает нормально, в чем моя ошибка?

Комментарии:

1. execSync не принимает обратный вызов — он возвращает стандартный вывод команды nodejs.org/api /. … Кроме того, во второй команде отсутствует "D:nodenode_http_server" . Что произойдет, если вы запустите ту же самую команду в командной строке? И каково содержимое возвращаемого значения execSync ?

2. Я также пробовал exec(), тот же результат. Какая вторая команда? Запуск в оболочке создает архив.

3. Я только что проверил C:Program Files7-Zip dir, архив там, хм