如何从 Node.js 内部正确执行 cd 命令?

How to correctly execute the cd command from inside of Node.js?

我正在为 Windows 开发一个非常简单的 Electron 应用程序,当从命令提示符执行时,它会打开一个对话框,用户可以通过该对话框 select 一个文件夹。然后,该应用会将命令提示符目录更改为用户 select 编辑的目录。

我的最终目标是能够简单地从对话框中键入 dirnav、select 文件夹,然后让应用程序负责将命令提示符重定向到 select ed 目录(而不是键入 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]) 似乎不起作用,因为它不是更改运行应用程序的命令提示符的目录,而是更改另一个(我不知道)命令提示符的目录.有什么办法可以解决这个问题吗?

这是一个可以从批处理文件运行的简单方案:

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

而且,我的 yourapp.js 是这样的(只是为了证明这个概念有效):

process.stdout.write("subdir");

这将最终在批处理文件中执行:

cd subdir

您应该能够在您自己的应用程序中插入您的电子 showOpenDialog(),然后将结果写入 process.stdout

批处理文件中的 for 循环确实看起来很奇怪,但这是我发现人们发现将标准输出从应用程序获取到环境变量中的唯一方法,您可以稍后在批处理文件。当然,您也可以使用临时文件(将输出重定向到临时文件),但我认为环境变量是更简洁的解决方案。