我正在尝试explorer.exe
从在WSL Ubuntu 20.04内运行的Node.js脚本打开。我遇到的问题是,explorer.exe
永远不要打开我想要的文件夹。代替WSL用户的主目录,而是打开Windows用户的Documents
文件夹。我应该怎么做才能explorer.exe
打开我想要的文件夹?
这是我尝试过的:
该脚本首先定义了一个execShellCommand
promisify函数exec
。然后,自执行函数首先使用转换process.env.HOME
为Windows路径wslpath
。然后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 () => {
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\\user\n' }
Error: Command failed: explorer.exe \\wsl$\Ubuntu-20.04\home\user
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\\user\n'
}
explorer.exe
不管输出中显示的错误如何运行。奇怪的是,如果我运行相同的命令,我的脚本试图explorer.exe \\\\wsl$\\Ubuntu-20.04\\home\\user\n
直接在WSL终端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)"`);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句