资源管理器.exe在 WSL 中以编程方式运行时未打开正确的文件夹



我正试图从WSL Ubuntu 20.04中运行的Node.js脚本打开explorer.exe。我遇到的问题是explorer.exe从不打开我想要的文件夹。它打开的不是WSL用户的主目录,而是Windows用户的Documents文件夹。我应该怎么做才能使explorer.exe打开我想要的文件夹?

以下是我尝试过的:

该脚本首先定义了一个函数execShellCommand,该函数承诺exec。然后,自执行函数首先将process.env.HOME转换为具有wslpath的Windows路径。然后以转换后的路径作为参数执行CCD_ 9。

#!/usr/bin/node
const execShellCommand = async cmd => {
const exec = require('child_process').exec
return new Promise((resolve, reject) => {
exec(cmd, (error, stdout, stderr) => {
if (error) {
console.warn(error)
}
resolve(stderr ? stderr : stdout)
})
})
}
;(async () => {
const path = await execShellCommand(`wslpath -w "${process.env.HOME}"`)
console.log({ path })
await execShellCommand(`explorer.exe ${path}`)
})()

当我在WSL 中运行脚本时得到的输出

$ ./script.js 
{ path: '\\wsl$\Ubuntu-20.04\home\usern' }
Error: Command failed: explorer.exe \wsl$Ubuntu-20.04homeuser

at ChildProcess.exithandler (child_process.js:308:12)
at ChildProcess.emit (events.js:315:20)
at maybeClose (internal/child_process.js:1048:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:288:5) {
killed: false,
code: 1,
signal: null,
cmd: 'explorer.exe \\wsl$\Ubuntu-20.04\home\usern'
}

不管输出中显示的错误如何,explorer.exe都会运行。奇怪的是,如果我运行相同的命令,我的脚本会尝试直接在WSL终端中运行(explorer.exe \\wsl$\Ubuntu-20.04\home\usern(。explorer.exe确实打开了我想要的文件夹。修剪路径末尾的新行没有帮助。

我认为您必须对wslpath生成的反斜杠进行一些额外的转义。下面的代码适用于我,这意味着它会在Windows资源管理器中打开正确的目录

注意:它仍然会抛出您提到的错误,我认为这是由于节点退出的方式,而不是执行explorer.exe时出现的任何错误;无论如何,我都不是节点专家

#!/usr/bin/node
const execShellCommand = async cmd => {
const exec = require('child_process').exec
return new Promise((resolve, reject) => {
exec(cmd, (error, stdout, stderr) => {
if (error) {
console.warn(error)
}
resolve(stderr ? stderr : stdout)
})
})
}
;(async () => {
let path = await execShellCommand(`wslpath -w "${process.env.HOME}"`)
console.log("before", {path});
path = path.replace(/\/g,"\\");
console.log("after", {path});
await execShellCommand(`explorer.exe ${path}`)
})()

甚至比替换反斜杠更干净,我认为这将通过将$HOME变量直接解析到命令行中来为您工作:

await execShellCommand(`explorer.exe "$(wslpath -w $HOME)"`);

相关内容

  • 没有找到相关文章

最新更新