在文件夹右键直接打开 Kali WSL:一条 wsl --cd 注册表脚本
用 WSL 的人大概都经历过这个流程:想在当前文件夹里进入 Kali,先打开 Windows Terminal,再敲 wsl -d kali-linux,然后手动 cd 到目标目录。路径短还好,路径一长就很容易敲错。更省事的做法是在文件夹空白处点右键,直接选择"Open in Kali (WSL)",让 WSL 以当前文件夹作为工作目录启动。
下面这段注册表脚本就是干这件事的。它只添加一个右键菜单项,不改动 WSL 本身的配置,导入后重启资源管理器即可使用。
脚本全文
reg
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenInKaliWSL]
@="Open in Kali (WSL) "
"Icon"="C:\\Windows\\System32\\wsl.exe"
[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenInKaliWSL\command]
@="wsl --cd \"%V.\""
保存为 .reg 文件,例如 OpenKaliWSL.reg,双击导入,重启资源管理器(或在任务管理器中结束 explorer.exe 后重新启动),右键菜单里就会出现 Open in Kali (WSL)。
逐项解析
菜单项位置:Directory\Background\shell
reg
[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenInKaliWSL]
Directory\Background\shell对应的是文件夹空白处右键 时出现的菜单。注意它和Directory\shell的区别:前者是文件夹内部空白区域,后者是文件夹图标本身。这段脚本只注册了前者,所以菜单只会在文件夹空白处右键时出现。OpenInKaliWSL是菜单项的内部名称,可以自定义,但同一位置下不要和已有项重名。
显示文字:@="Open in Kali (WSL) "
@ 的值就是这个菜单项显示的文字。注意末尾有一个空格 :原文是 "Open in Kali (WSL) ",引号内最后一个字符是空格。这可能是作者有意为之,也可能是手误。如果导入后菜单文字后面看起来多了一个空位,把末尾空格删掉即可,不影响功能。
如果想显示中文,可以改成 "在 Kali (WSL) 中打开",但要注意文件编码------.reg 文件如果保存为普通 ANSI,中文可能乱码;建议保存为 UTF-16 LE 或带 BOM 的 UTF-8。
图标:"Icon"="C:\\Windows\\System32\\wsl.exe"
菜单左侧显示的图标直接复用 wsl.exe 的图标。wsl.exe 位于 C:\Windows\System32,这个路径在绝大多数 Windows 系统上是固定的,通常不需要修改。反斜杠在 .reg 文件中需要双写,所以写成 C:\\Windows\\System32\\wsl.exe。
命令:@="wsl --cd \"%V.\""
这一行是整段脚本的核心。点击菜单后实际执行的是:
bat
wsl --cd "%V."
拆开看:
wsl:调用 WSL 启动默认发行版。这里没有写-d kali-linux,所以启动的是当前默认发行版。如果默认发行版不是 Kali,菜单名"Open in Kali"就名不副实了------详见下文"注意:默认发行版"一节。--cd:WSL 的工作目录参数,启动时把 Linux 侧的工作目录切换到指定路径。这是较新版本 WSL 支持的功能;如果--cd不被识别,说明 WSL 版本偏旧,需要先升级 WSL。"%V.":%V是文件夹背景右键时 Windows 传入的当前文件夹路径。外面套双引号是为了应对路径中的空格;末尾的.表示"当前目录",即C:\some\folder\.和C:\some\folder指向同一位置。这个写法是合法的 Windows 路径,WSL 的--cd能够正确解析。在.reg文件中,双引号要写成\"。
--cd 的好处是:WSL 启动后直接落在对应目录,不需要再手动 cd,而且路径由 Windows 侧传入,省去了手动输入长路径的麻烦。
使用步骤
- 确认 WSL 中有 Kali 发行版 。在 PowerShell 或 CMD 中执行
wsl -l -v,查看已安装的发行版列表。如果没有 Kali,先执行wsl --install -d kali-linux(或从 Microsoft Store 安装)。 - 确认默认发行版 。执行
wsl -l -v时,默认发行版前面会有*标记。如果默认不是 Kali,有两种选择:- 把 Kali 设为默认:
wsl --set-default kali-linux; - 或者修改脚本命令,显式指定发行版:
@="wsl -d kali-linux --cd \"%V.\""。
- 把 Kali 设为默认:
- 确认 WSL 支持
--cd。在 PowerShell 中执行wsl --cd C:\ -- echo ok,如果能输出ok,说明当前 WSL 版本支持该参数;如果报错,先执行wsl --update升级。 - 将脚本保存为
.reg文件并双击导入。写入HKEY_CLASSES_ROOT通常会触发 UAC 提示,选择"是"。 - 重启资源管理器,或在任务管理器中结束
explorer.exe后重新启动。也可以在文件夹空白处右键,如果菜单没出现,再重启一次资源管理器。 - 在任意文件夹空白处右键,选择
Open in Kali (WSL),应该会打开一个 WSL 终端,并且工作目录已经是当前文件夹。
注意:默认发行版与菜单名的一致性
脚本的菜单文字写的是 Open in Kali (WSL),但命令里只有 wsl,没有指定发行版。这意味着实际行为是"用默认发行版打开",而不是"用 Kali 打开"。如果你的默认发行版恰好是 Kali,两者一致,没有问题;如果默认发行版是 Ubuntu 或其他,菜单名就会误导人。
两种修正方式:
- 改默认发行版 (影响全局):
wsl --set-default kali-linux。这样所有直接执行wsl的地方都会启动 Kali。 - 改脚本命令 (只影响这个菜单):把
command的值改成wsl -d kali-linux --cd \"%V.\"。这样无论默认发行版是什么,这个菜单都固定打开 Kali。
如果 Kali 的发行版名称不是 kali-linux,以 wsl -l -v 列出的名称为准。
关于 %V. 末尾的点
%V 在文件夹背景右键时返回的就是当前文件夹的完整路径,通常已经不含末尾反斜杠。加一个 . 写成 %V.,等价于"当前目录",是 Windows 路径中的合法写法。这样做不会改变目标目录,也不是必须的------"%V" 本身就能正常工作。保留这个写法没有坏处,只是看起来稍微特别一点。
如果你希望脚本同时支持"文件夹图标右键",可以照搬上一篇的做法,再加一段注册到 HKEY_CLASSES_ROOT\Directory\shell\OpenInKaliWSL,命令参数用 %1 代替 %V:
reg
[HKEY_CLASSES_ROOT\Directory\shell\OpenInKaliWSL]
@="Open in Kali (WSL)"
"Icon"="C:\\Windows\\System32\\wsl.exe"
[HKEY_CLASSES_ROOT\Directory\shell\OpenInKaliWSL\command]
@="wsl --cd \"%1\""
清理方法
如果不想保留这个菜单,把以下内容保存为 .reg 并导入,即可删除对应注册表项:
reg
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\Directory\Background\shell\OpenInKaliWSL]
也可以在 regedit 中手动定位到 HKEY_CLASSES_ROOT\Directory\Background\shell\OpenInKaliWSL 并删除。删除后同样需要重启资源管理器才能看到菜单消失。
小结
这段脚本只做一件事:在文件夹空白处右键菜单里加一个入口,点击后执行 wsl --cd "<当前文件夹路径>"。核心概念有三个------Directory\Background\shell 是文件夹背景右键的位置,%V 是当前文件夹路径,--cd 让 WSL 启动后直接落在该目录。使用时留意两点:命令里没有指定发行版 ,所以实际打开的是默认发行版;--cd 需要较新的 WSL 版本 ,旧版本要先升级。把这两点确认好,这个菜单就能稳定地用起来,省掉每次手动 cd 的步骤。