NodeJS 在档案总管中开启目录

zvms9eto  于 2022-11-29  发布在  Node.js
关注(0)|答案(3)|浏览(213)

在ms Windows上从node.js代码中,如何打开一个特定的目录(例如:c:\documents)中的文件夹?
我猜在c#,它会是:

process.Start(@"c:\test")
4ioopgfo

4ioopgfo1#

尝试以下操作,在运行Node.js* 的计算机上打开一个文件资源管理器窗口 *:

require('child_process').exec('start "" "c:\\test"');

如果你的路径不包含空格,你也可以使用'start c:\\test',但是上面的方法--它需要""作为第二个参数[1]--是最健壮的方法。
注意事项:

  • 文件资源管理器窗口将 * 异步 * 启动,并在启动时 * 获得焦点 *。
  • This related question要求提供一个解决方案,以防止窗口“窃取”焦点。

[1]cmd.exe的内部start命令默认将"..."括起来的第一个参数解释为要创建的新控制台窗口的 * 窗口标题 *(此处不适用)。通过显式提供(伪)窗口标题-"",第二个参数被可靠地解释为目标可执行文件/文档路径。

ff29svar

ff29svar2#

我在WSL和潜在的Windows本身上找到了另一种方法。
请注意,您必须确保您正在格式化Windows而不是Linux(WSL)的路径。我想在Windows上保存一些东西,所以为了做到这一点,您使用WSL上的/mnt目录。

// format the path, so Windows isn't mad at us
// first we specify that we want the path to be compatible with windows style
// then we replace the /mnt/c/ with the format that windows explorer accepts
// the path would look like `c:\\Users\some\folder` after this line
const winPath = path.win32.resolve(dir).replace('\\mnt\\c\\', 'c:\\\\');

// then we use the same logic as the previous answer but change it up a bit
// do remember about the "" if you have spaces in your name
require('child_process').exec(`explorer.exe "${winPath}"`);

这将为您打开文件资源管理器。

h9a6wy2h

h9a6wy2h3#

使用这个包会很好,这样它就可以在不同的平台https://www.npmjs.com/package/open-file-explorer上打开
或者就用这部分

function openExplorerin(path, callback) {
    var cmd = ``;
    switch (require(`os`).platform().toLowerCase().replace(/[0-9]/g, ``).replace(`darwin`, `macos`)) {
        case `win`:
            path = path || '=';
            cmd = `explorer`;
            break;
        case `linux`:
            path = path || '/';
            cmd = `xdg-open`;
            break;
        case `macos`:
            path = path || '/';
            cmd = `open`;
            break;
    }
    let p = require(`child_process`).spawn(cmd, [path]);
    p.on('error', (err) => {
        p.kill();
        return callback(err);
    });
}

相关问题