用了 Windows 11 之后最让我别扭的就是资源管理器右键菜单里的“以管理员身份打开 CMD”和“以管理员身份打开 PowerShell”这两个选项不见了。不是彻底被删了而是被塞进了“显示更多选项”这个二级菜单里每次都要多点一下。对于一天要开十几次命令行窗口的人来说多敲一次鼠标节奏就断了。这篇文章就是干这件事把这两个管理员命令加回右键菜单并且把背后的注册表原理、参数坑、还原方式讲透。不管你是开发者、运维还是普通爱折腾的用户只要想少点几下鼠标都能照着做。1. 先搞清楚Windows 11 的右键菜单到底改了什么1.1 菜单分成了“新菜单”和“经典菜单”两层Windows 11 发布时微软对资源管理器右键菜单做了大改。默认情况下你右键一个文件、文件夹或者空白区域看到的是一套全新的紧凑菜单排版更接近现代 UI只保留高频操作比如“复制”“粘贴”“重命名”“刷新”底层的技术模型也从传统的 Win32 菜单变成了基于 XAML 的 UI 组件。而右下角那个“显示更多选项”点击之后才会展开 Windows 10 时代那套完整的经典菜单。这两套菜单的注册来源完全不同。经典菜单里每个条目背后基本都是HKEY_CLASSES_ROOT\*\shell或HKEY_CLASSES_ROOT\Directory\Background\shell这类注册表项而新菜单里的条目多数来自CommandStore以及系统组件注册的 COM 接口。这就导致一个很常见的现象你在网上搜到一段添加右键菜单的注册表代码导入后却发现在 Windows 11 的新菜单里根本看不到必须点“显示更多选项”才出现。不是代码错了而是它们本来就被安排到了经典菜单那一层。1.2 为什么自定义菜单默认进不了新菜单第一层很多人以为 Windows 11 只是把菜单“隐藏”了注册表路径没变所以只要能写注册表就能让它出现在第一层。实际没有这么简单。新菜单的加载机制要求扩展程序实现特定的 COM 接口在CommandStore下注册并且要通过资源管理器的校验。传统注册表命令项只是经典菜单的扩展通道资源管理器不会自动把它们提升到新菜单第一层。所以如果你想不改动系统整体行为让自定义菜单项出现在新菜单里需要写一个独立的 COM 模块开发成本和维护成本都不低。普通用户完全没必要去啃 COM。更现实的路线有两条一是接受“点击一次显示更多选项”这个动作通过按住 Shift 键再右键可以直接打开经典菜单更快二是干脆把 Windows 11 的新菜单关掉整体恢复到 Windows 10 那种完整的经典右键菜单这样你加的所有菜单项都会直接出现在第一层。这两条路我都会在后面的实操里给出具体做法。2. 开工前的准备注册表路径和权限2.1 要动哪些注册表位置先明确一个概念右键“文件夹窗口里的空白处”和右键“文件夹图标”是不同的触发场景。前者代表你对“当前目录执行命令”后者代表你对“这个文件夹对象执行操作”。我们要添加的是在某个目录里打开命令行所以应该挂到Directory\Background\shell下面同时桌面空白处也是一个特殊目录背景挂到DesktopBackground\shell。如果你误写成了Directory\shell那只有右键文件夹图标时才会出现菜单在空白处右键反而看不到。具体来说本次会用到这些注册表根路径触法方式注册表路径文件夹窗口空白处右键HKEY_CLASSES_ROOT\Directory\Background\shell桌面空白处右键HKEY_CLASSES_ROOT\DesktopBackground\shell文件夹图标右键不推荐HKEY_CLASSES_ROOT\Directory\shell文件上右键不推荐HKEY_CLASSES_ROOT\*\shell这里我直接用HKEY_CLASSES_ROOT因为它是全系统生效的。如果你想只对当前用户生效可以写成HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell效果也就是让当前账户可见。区别只在于写的注册表作用域以及是否需要管理员权限。用HKEY_CLASSES_ROOT时最好以管理员身份导入否则可能会遇到权限拒绝。2.2 备份和运行方式改注册表之前我建议先备份一次涉及到的键哪怕只是几个小分支。方法很简单打开注册表编辑器定位到HKEY_CLASSES_ROOT\Directory\Background\shell右键导出保存为一个 .reg 文件。万一后面折腾坏了直接双击这个备份文件就能导入回去。实际操作时我推荐把下面的内容保存成 .reg 文件右键“以管理员身份运行”导入而不是手动在注册表编辑器里一个个键去建。.reg 文件的好处是批量、可复制、出错率低而且还原也方便。导入后不需要重启系统但建议重启一下资源管理器让菜单刷新。最简单的命令是在任务管理器里找到“Windows 资源管理器”右键选择“重新启动”。也可以打开命令提示符执行taskkill /f /im explorer.exe start explorer.exe注意这个命令会短暂黑屏属于正常现象。3. 核心实操给文件夹空白处添加两个管理员命令3.1 一份可以直接用的 reg 脚本下面这段 .reg 脚本会同时给“文件夹空白处”和“桌面空白处”注册四个菜单项以管理员身份打开 CMD、以管理员身份打开 PowerShell。复制到记事本另存为AddAdminMenu.reg再用管理员身份双击导入。Windows Registry Editor Version 5.00 ; 文件夹空白处 - 以管理员身份打开 CMD [HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdAsAdmin] 以管理员身份打开 CMD IconC:\\Windows\\System32\\cmd.exe [HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdAsAdmin\command] powershell -NoProfile -Command \Start-Process cmd -Verb RunAs -ArgumentList /k cd /d \\\%V\\\\ ; 文件夹空白处 - 以管理员身份打开 PowerShell [HKEY_CLASSES_ROOT\Directory\Background\shell\OpenPowerShellAsAdmin] 以管理员身份打开 PowerShell IconC:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe [HKEY_CLASSES_ROOT\Directory\Background\shell\OpenPowerShellAsAdmin\command] powershell -NoProfile -Command \Start-Process powershell -Verb RunAs -ArgumentList -NoExit -Command Set-Location \\\%V\\\\ ; 桌面空白处 - 以管理员身份打开 CMD [HKEY_CLASSES_ROOT\DesktopBackground\shell\OpenCmdAsAdmin] 以管理员身份打开 CMD IconC:\\Windows\\System32\\cmd.exe [HKEY_CLASSES_ROOT\DesktopBackground\shell\OpenCmdAsAdmin\command] powershell -NoProfile -Command \Start-Process cmd -Verb RunAs -ArgumentList /k cd /d \\\%V\\\\ ; 桌面空白处 - 以管理员身份打开 PowerShell [HKEY_CLASSES_ROOT\DesktopBackground\shell\OpenPowerShellAsAdmin] 以管理员身份打开 PowerShell IconC:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe [HKEY_CLASSES_ROOT\DesktopBackground\shell\OpenPowerShellAsAdmin\command] powershell -NoProfile -Command \Start-Process powershell -Verb RunAs -ArgumentList -NoExit -Command Set-Location \\\%V\\\\导入这段脚本之后你在任意文件夹窗口的空白处右键然后点“显示更多选项”就能看到“以管理员身份打开 CMD”和“以管理员身份打开 PowerShell”两个新条目。在桌面空白处右键也是一样。提示如果你只想添加其中某一个菜单把对应段落的注册表内容保留下其余删掉再导入即可。菜单显示名称也可以用英文直接修改...后面的字符串。3.2 命令参数逐段拆解很多网上教程只给代码不解释一旦出问题完全不知道怎么改。这里我把 CMD 那条命令拆开讲清楚。实际 command 的值是powershell -NoProfile -Command Start-Process cmd -Verb RunAs -ArgumentList /k cd /d \%V\先看最外层为什么不是直接用cmd.exe而是包了一层 PowerShell因为注册表 command 里的程序由资源管理器直接调用继承的是资源管理器所在会话的权限没法主动触发 UAC 提权。而 PowerShell 的Start-Process -Verb RunAs会明确要求以管理员身份启动目标程序这时系统会弹 UAC 确认框。所以这一层是必需的它负责完成“提权动作”。Start-Process cmd很好懂目标程序是 cmd.exe。-Verb RunAs表示以管理员权限启动。-ArgumentList后面的一串是传给 cmd.exe 的参数也就是/k cd /d %V。/k让 cmd 打开后保持在当前窗口而不是执行完就退出cd /d用于切换目录/d参数是为了保证跨盘符切换有效%V是资源管理器传入的当前目录路径加上引号是为了处理路径里有空格的情况。如果你不加引号在C:\Program Files这种目录下执行会直接报错。PowerShell 那条同理-NoExit保留窗口-Command Set-Location \%V\进入当前目录。它没有用cd /d因为 PowerShell 的Set-Location本身就支持跨驱动器路径带引号即可。3.3 关于 %V 的隐藏细节%V是资源管理器给背景右键菜单预留的变量它代表触发菜单时所在的实际文件夹路径。比如你在D:\work\project窗口的空白处右键%V就替换成D:\work\project。这个替换发生在资源管理器启动命令的那一刻所以注册表值里直接写%V不需要额外展开。不过要注意%V并不是在所有右键场景下都可靠。比如桌面空白处部分版本的 Windows 对DesktopBackground分支的%V处理不太一样有的会返回桌面路径有的返回空字符串。如果导入脚本后发现桌面菜单打开的 CMD 停在C:\Windows\System32而不是桌面那就说明%V没被正确传过去。解决方法是把桌面分支的%V改成固定路径或者改成%USERPROFILE%。文件夹窗口里一般不遇到这个问题。另外%V还可能包含%字符理论上会被当作环境变量展开但实际测试中资源管理器会先替换好路径再传给命令所以正常目录名里带%的情况极少遇到再说平时不用过度担心。4. 让菜单“直接出现”的两种进阶方案4.1 最低成本Shift 右键如果你不打算关掉 Windows 11 新菜单最贴合“直接出现”这个诉求的兼容办法是先按住Shift键再在文件夹空白处右键。这样右键菜单会直接显示完整的经典菜单不需要先点“显示更多选项”。原因是在 Windows 11 的资源管理器里Shift 右键会临时调动经典 Win32 菜单。实际用起来这只是肌肉记忆的小调整但确实能省一步。我强烈建议先这样用两天如果你还是觉得多按一个 Shift 都麻烦再考虑下一步方案。4.2 把 Windows 11 新菜单整体关掉既然传统注册表菜单只能是经典菜单的一部分那干脆让右键菜单永远显示经典版本。这个方法只需要在注册表里加一个空值让 Windows 11 的新菜单组件失效。具体做法在注册表编辑器中地址栏输入HKEY_CURRENT_USER\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32如果路径不存在就手动新建InprocServer32项。选中它在右侧把默认值名称是(默认)双击打开里面的数据清空不要填任何内容确定。然后重启资源管理器。经过这一步右键菜单会整体回退到 Windows 10 风格的完整菜单前面我们添加的“以管理员身份打开 CMD”“以管理员身份打开 PowerShell”就会直接出现在菜单第一层不需要再点“显示更多选项”。想恢复原来的新菜单时把HKEY_CURRENT_USER\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}整个项删除再重启一次资源管理器即可。注意这个键只影响当前用户不会影响系统其他用户。副作用也要说清楚回退之后右键菜单会变得很长视觉风格和 Windows 10 接近新菜单的紧凑感、放大镜预览这些细节都没了。这是“直接出现”和“保留新界面”之间的取舍。我自己的建议是如果你的右键菜单经常要开命令行回退很值得如果只是偶尔用Shift 右键就够。4.3 第三方工具是不是值得用市面上确实有专门的右键菜单管理工具可以自定义 Windows 11 的第一层菜单。这类工具要么注入资源管理器进程要么替换菜单渲染组件原理上已经超出注册表范畴所以能绕开上面两种方案的限制。但同时意味着它常驻后台、有兼容风险而且下载来源如果不干净很容易中招。我的态度是能不用就不用。除非你对当前新菜单的样式有强烈偏好又接受长期运行一个第三方后台程序否则通过注册表 回退经典菜单得到的稳定性和可控性都强得多。至少出问题时自己知道去哪里删第三方工具一旦卸载不干净残留的右键菜单反而更烦。5. 常见问题与排查技巧实录5.1 菜单项根本没出现先确认你在文件夹窗口的空白处点击不是右键选中某个文件。再确认导入的 .reg 文件格式没有乱码。最重要的一步导入后重启资源管理器。如果还没出现用注册表编辑器检查HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdAsAdmin是否存在默认值和 command 子项是否都有数据。如果默认值为空菜单名就不会显示。有些安全软件会拦截对HKEY_CLASSES_ROOT的写操作导入时提示“拒绝访问”就是这个原因。还有如果你导入的是HKEY_CURRENT_USER\Software\Classes分支而资源管理器正在以管理员权限运行可能会出现权限不一致的问题。最省心的方法就是完全按照我给的 HKLM 脚本用管理员权限导入。5.2 点击菜单后没有弹出 UAC或者窗口不是管理员这个问题的根源基本都在 command 字符串的写法。如果-Verb RunAs没有被正确解析资源管理器可能直接以普通权限启动了 cmd。你可以打开一个正常命令提示符窗口手动执行powershell -NoProfile -Command Start-Process cmd -Verb RunAs -ArgumentList /k cd /d \%TEMP%\如果能弹 UAC 并打开管理员窗口说明命令本身没问题问题出在注册表导入时引号被转义错了。这时不要手动编辑注册表里的字符串建议重新生成一份 .reg 文件检查代码块里的\和\\\是否和上面保持一致。还有一种情况是系统组策略把 UAC 关了-Verb RunAs就不会弹窗而是直接以当前用户权限启动。这是系统安全策略的问题不建议通过降低 UAC 来迁就右键菜单。5.3 打开后目录停在 C:\Windows\System32这是管理员命令行最常见的现象。因为 UAC 提权后的进程由系统启动不会继承资源管理器的工作目录。虽然命令里写了cd /d %V%但是如果%V包含的路径里有一点引号配对错误cmd 就会忽略这条命令停在工作目录默认值上。排查方法打开一个普通 CMD替换%V为真实路径比如执行powershell -NoProfile -Command Start-Process cmd -Verb RunAs -ArgumentList /k cd /d \D:\work\如果这样能正常切换那说明注册表里的%V没有被替换或者被替换成了空值。最常见错误是在注册表编辑器里把%V写成了%V%或者命令行里少了一组引号。直接重新导入完整的 .reg 文件能避免大部分问题。5.4 怎样删除或还原菜单项不要直接去注册表里大海捞针可以用命令一次删干净。打开管理员 CMD执行以下两条删除命令分别删除文件夹背景菜单和桌面背景菜单下的两个自定义项reg delete HKCR\Directory\Background\shell\OpenCmdAsAdmin /f reg delete HKCR\Directory\Background\shell\OpenPowerShellAsAdmin /f reg delete HKCR\DesktopBackground\shell\OpenCmdAsAdmin /f reg delete HKCR\DesktopBackground\shell\OpenPowerShellAsAdmin /f然后重启资源管理器菜单就恢复原样。如果你同时还用了“回退经典菜单”的方案记得把那个 CLSID 键也删掉方法在 4.2 里写过。5.5 安全提醒这个操作本身是安全的它只是往注册表里加了两个菜单项不碰系统文件不修改现有程序。它也不会绕过 UAC相反每次点击菜单都会弹一次管理员授权窗口这才是正确状态。请一定保留 UAC 开启别为了省一次点击把系统的安全防线降下来。另外注册表里的反斜杠、引号非常敏感。从我遇到的求助来看大量问题都是“抄错了字符”而不是方案本身的问题。所以我强烈建议你直接用脚本文件导入不要手工在注册表编辑器里一个个建。手工建键很容易漏掉command子项或者把默认值类型设成REG_EXPAND_SZ而不是REG_SZ这些都会导致菜单不工作。最后的实际操作体会这套方案我用了很久最满意的一点是它不依赖任何第三方工具系统重装之后只要导入一份 .reg 就能恢复。如果你平时只用命令行推荐只加 PowerShell 那条毕竟现在微软自己也推 Windows TerminalCMD 的使用频率会越来越低。如果你和我一样习惯老操作两条都加上也无妨。实际使用中我会把“以管理员身份打开 CMD”的图标单独设成一个显眼的颜色避免在菜单里和普通 PowerShell 混淆。最后还是那句话改之前备份注册表改完重启资源管理器出问题就知道往哪回滚。