Как правильно выполнить команду cd изнутри Node.js?

Gark Garcia спросил: 13 июня 2018 в 11:51 в: node.js

Я разрабатываю очень простое приложение Electron для Windows, которое при выполнении из командной строки открывает диалоговое окно, в котором пользователь может выбрать папку. Затем приложение изменит каталог командной строки на каталог, выбранный пользователем.

Моя конечная цель - просто ввести dirnav, выбрать папку из диалогового окна и приложение должно позаботиться о перенаправлении командной строки в выбранный каталог (вместо ввода cd C:\Users\myName\whateverDirectory). Вот что я до сих пор:

const exec     = require('child_process').exec;
const electron = require('electron');
const {app, dialog} = electron;app.on('ready', () => {
    dialog.showOpenDialog(
        {
            title: 'Select a directory',
            defaultPath: '.',
            buttonLabel: 'Select',
            properties: ['openDirectory']
        }, (responce) => {
            exec('cd ' + responce[0], () => {
                app.quit();
            });
        }
    );
});

К сожалению, просто выполнение exec('cd ' + responce[0]), похоже, не сработало, потому что вместо изменения каталога командной строки было запущено приложение, оно меняет каталог другой (неизвестной мне) командной строки. Есть ли способ работать вокруг этого?

1 ответ

Есть решение
jfriend00 ответил: 14 июня 2018 в 05:17

Вот простая схема, которая будет работать из пакетного файла:

for /f %%i in ('node yourapp.js') do set NEWDIR=%%i
cd %NEWDIR%

И мой myrapp.js - это (просто чтобы доказать, что концепция работает):

process.stdout.write("subdir");

Это закончится в командном файле:

cd subdir

Вы должны подключить свой электронный showOpenDialog() в вашем собственном приложении, а затем просто напишите результат на process.stdout.

Цикл for в пакетном файле действительно выглядит странным, но это единственный способ Я обнаружил, что люди обнаружили, что stdout из приложения в переменную среды, которую затем можно использовать позже в пакетном файле. Разумеется, вы также можете использовать временный файл (перенаправить вывод в файл temp), но я думал, что переменная окружения была более чистым решением.

Gark Garcia ответил: 15 июня 2018 в 12:19
Благодаря! Он творит чудеса!

Дополнительное видео по вопросу: Как правильно выполнить команду cd изнутри Node.js?

Node.js Tutorial for Beginners 2 - How to Install Node.js with NPM on Windows

How to install Node.JS, NPM, And Angular CLI using Windows Command Prompt

Build A Command Line Interface With Node.js & MongoDB