如何从 WSL Bash 命令行启动 Windows 资源管理器?

如何从 WSL Bash 命令行启动 Windows 资源管理器?

在 WSL Bash shell 和 Windows 环境之间导航可能具有挑战性,因为 Windows 中的路径是这样的: C:\Windows 而在 Bash 中则是: /mnt/c/Windows 使用当前工作目录 (CWD) 启动 Windows 资源管理器不起作用: start .

我应该输入什么命令?

答案1

现在你只需要写

#!/bin/bash
explorer.exe

在你的script.sh文件里面,你可以用它运行

bash script.sh

尖端:

答案2

更新答案 4/25/2024

好吧,有一个更好的解决方案。它适用于所有文件系统。

尝试这个:

alias start='explorer.exe'

# or if explorer.exe is not on your $PATH

alias start='/path/to/explorer.exe'

对我有用!

非 Linuxroot文件系统的旧答案 2017 年 11 月 21 日

发现了这个:https://stackoverflow.com/questions/44245721/launching-explorer-from-wsl

本质上:

    alias start='cmd.exe /c start'

那么start .也可以。

注意:它不会在仅限 Linux 的文件上启动资源管理器,但任何映射的 Windows 文件系统都可以运行。

答案3

默认情况下 /mnt/c/Windows 不在 bash 路径环境变量中,所以到目前为止最好的方法是: /mnt/c/Windows/explorer.exe .

答案4

这是一个较老的问题,可能需要更新的答案,因为多年来 WSL 中的情况发生了很大变化。

Windows 目录默认位于路径中,因此要打开资源管理器,请转到当前目录, 您可以使用explorer.exe .

然而正如问题所说,使用这个可能会更具挑战性其他目录,因为路径格式不同。如果你想使用特定路径启动 Explorer,你需要提供视窗路径并确保反斜杠被正确引用。

为了解决这个问题,WSL 现在包含一个内置命令来在 Linux 和 Windows 路径格式之间进行转换 - wslpath。这允许您使用 Linux 路径启动资源管理器,这意味着您可以使用制表符完成路径等。

为了方便起见,您可以根据您的 shell 设置函数或别名。最初的问题是在 WSL 仅直接支持 Bash shell 时编写的,但现在我们有 (很多) 更多选项:

  • 重击:

    explorer () {
      /mnt/c/Windows/explorer.exe $(wslpath -w "$1")
    }
    

    将该功能放置在启动中(或根据需要将其更改为路径中的脚本)

  • 鱼:

    function explorer --description 'Launch Windows Explorer in the specified directory'
        /mnt/c/Windows/explorer.exe $(wslpath -w "$argv[1]")
        return 0
    end
    

    将其放入~/.config/fish/functions/explorer.fish(或等效物)以便根据需要进行延迟加载。

  • 简体中文:

    export def explorer [ path ] {
      let _ = /mnt/c/Windows/explorer.exe (wslpath -w $"($path | path expand)")
    }
    

    注意:虽然这看起来可能有点复杂,但可以创建一个更简单的版本。help由于 Nushell 是我当前的 shell,所以我选择创建一个内置完全支持的自定义命令。

    您可以将其直接添加到您的配置中config.nu或创建一个~/.config/nushell/scripts/modExplorer.nu并将use其作为模块添加到您的配置中或在需要时使用。

    help注意:如果需要,完整版本提供支持:

    # Launch Windows Explorer in the specified directory
    export def explorer [
      path: string     # The Linux path to launch
    ]: nothing -> nothing {
      let _ = /mnt/c/Windows/explorer.exe (wslpath -w $"($path | path expand)")
    }
    

笔记:

  • 在 Fish 和 Nushell 中,即使命令有效,Explorer 似乎也会返回退出代码 1。我选择在 Fish 和 Nushell 函数中忽略该代码,以防止下一个提示显示错误指示。

  • 使用带有和空格的 Linux 路径~以及映射到 Windows 驱动器的 Linux 路径(例如)进行测试/mnt/c

相关内容