Windows 右键菜单管理工具
功能描述:
1. 添加:打开 Cmd
2. 添加:打开 Cmd(管理员)
3. 添加:打开 PowerShell
4. 添加:打开 PowerShell(管理员)
5. 移除:打开 Cmd
6. 移除:打开 Cmd(管理员)
7. 移除:打开 PowerShell
8. 移除:打开 PowerShell(管理员)
9. 一键添加所有功能
10. 一键移除所有功能
11. 刷新状态
12. 退出脚本
如果执行了添加只有在右击文件夹空白处时, 才在右键菜单中显示对应的功能, 如果执行了移除, 则右键菜单中不显示对应的功能.
如果执行了添加, 右击选择打开对应的管理员后, 弹出的管理窗口对应路径也是这个文件夹的路径.

代码实现:
# -*- coding: utf-8 -*- """ Windows 文件夹空白处右键菜单:命令行 / PowerShell(普通与管理员) 需当前用户可写 HKCU;管理员项会触发 UAC。 """ from __future__ import annotations import os import sys import winreg from typing import Callable, Dict, Tuple # --------------------------------------------------------------------------- # 注册表:仅在此处集中定义,便于查看与修改 # HKCU 下会覆盖当前用户的类注册,无需管理员权限即可写入(管理员“启动”仍会 UAC) # --------------------------------------------------------------------------- REG_HIVE = winreg.HKEY_CURRENT_USER # 相对 HKEY_CURRENT_USER 的路径(不含根键名) REG_SHELL_BASE = r"Software\Classes\Directory\Background\shell" # 每项:(注册表子键名, 菜单显示文字, 执行的命令字符串, 是否显示 UAC 盾牌图标) # %V:资源管理器在「文件夹背景」右键中替换为当前文件夹路径 _CMD_ADMIN = ( 'powershell.exe -NoProfile -WindowStyle Hidden -Command ' '"Start-Process cmd.exe -Verb RunAs -ArgumentList \'/k pushd \\"%V\\"\'"' ) _PS_ADMIN = ( 'powershell.exe -NoProfile -WindowStyle Hidden -Command ' '"Start-Process powershell.exe -Verb RunAs -ArgumentList \'-NoExit\',\'-NoProfile\',\'-Command\',\'Set-Location -LiteralPath \'\'%V\'\'\'"' ) MENU_DEFS: Dict[str, Tuple[str, str, str, bool]] = { "OpenCmdHere": ( '打开 Cmd', "cmd.exe", r'cmd.exe /s /k pushd "%V"', False, ), "OpenCmdHereAdmin": ( '打开 Cmd(管理员)', "cmd.exe", _CMD_ADMIN, True, ), "OpenPowerShellHere": ( '打开 PowerShell', "powershell.exe", "powershell.exe -NoProfile -NoExit -Command \"Set-Location -LiteralPath '%V'\"", False, ), "OpenPowerShellHereAdmin": ( '打开 PowerShell(管理员)', "powershell.exe", _PS_ADMIN, True, ), } def _full_shell_path(subkey_name: str) -> str: return REG_SHELL_BASE + "\\" + subkey_name def _ensure_utf8_stdio() -> None: try: sys.stdout.reconfigure(encoding="utf-8") # type: ignore[attr-defined] sys.stdin.reconfigure(encoding="utf-8") # type: ignore[attr-defined] except Exception: pass def key_exists(subpath: str) -> bool: try: winreg.OpenKey(REG_HIVE, subpath, 0, winreg.KEY_READ) return True except OSError: return False def add_entry(name: str) -> None: if name not in MENU_DEFS: raise KeyError(name) label, icon_exe, command, show_uac = MENU_DEFS[name] shell_path = _full_shell_path(name) cmd_path = shell_path + r"\command" with winreg.CreateKey(REG_HIVE, shell_path) as sk: winreg.SetValueEx(sk, "", 0, winreg.REG_SZ, label) winreg.SetValueEx(sk, "Icon", 0, winreg.REG_SZ, icon_exe) if show_uac: winreg.SetValueEx(sk, "HasLUAShield", 0, winreg.REG_SZ, "") with winreg.CreateKey(REG_HIVE, cmd_path) as ck: winreg.SetValueEx(ck, "", 0, winreg.REG_SZ, command) def remove_entry(name: str) -> None: shell_path = _full_shell_path(name) cmd_path = shell_path + r"\command" # 先删子键 try: winreg.DeleteKey(REG_HIVE, cmd_path) except OSError: pass try: winreg.DeleteKey(REG_HIVE, shell_path) except OSError: pass def status_line(name: str) -> str: return "已安装" if key_exists(_full_shell_path(name)) else "未安装" def print_banner() -> None: print("========================================================") print(" Windows 右键菜单管理工具") print("========================================================") print() print(' 脚本功能:管理 "在此处打开命令行/PowerShell" 菜单') print(" 注意:管理员模式将触发 UAC 提示") print() print("--------------------------------------------------------") print(' [1] 添加:打开 Cmd') print(' [2] 添加:打开 Cmd(管理员)') print(' [3] 添加:打开 PowerShell') print(' [4] 添加:打开 PowerShell(管理员)') print("--------------------------------------------------------") print(' [5] 移除:打开 Cmd') print(' [6] 移除:打开 Cmd(管理员)') print(' [7] 移除:打开 PowerShell') print(' [8] 移除:打开 PowerShell(管理员)') print("--------------------------------------------------------") print(" [9] 一键添加所有功能") print(" [10] 一键移除所有功能") print(" [11] 刷新状态") print("--------------------------------------------------------") print(" [0] 退出脚本") print("========================================================") print() def print_status() -> None: print("状态:") print(f"CMD:\t\t{status_line('OpenCmdHere')}") print(f"CMD(管理员):\t{status_line('OpenCmdHereAdmin')}") print(f"PowerShell:\t{status_line('OpenPowerShellHere')}") print(f"PowerShell(管理员):\t{status_line('OpenPowerShellHereAdmin')}") print() print(f"注册表根: HKEY_CURRENT_USER\\{REG_SHELL_BASE}") print() def main() -> None: _ensure_utf8_stdio() order = [ "OpenCmdHere", "OpenCmdHereAdmin", "OpenPowerShellHere", "OpenPowerShellHereAdmin", ] actions: Dict[str, Callable[[], None]] = { "1": lambda: add_entry("OpenCmdHere"), "2": lambda: add_entry("OpenCmdHereAdmin"), "3": lambda: add_entry("OpenPowerShellHere"), "4": lambda: add_entry("OpenPowerShellHereAdmin"), "5": lambda: remove_entry("OpenCmdHere"), "6": lambda: remove_entry("OpenCmdHereAdmin"), "7": lambda: remove_entry("OpenPowerShellHere"), "8": lambda: remove_entry("OpenPowerShellHereAdmin"), "9": lambda: [add_entry(n) for n in order], "10": lambda: [remove_entry(n) for n in order], "11": lambda: None, } while True: print_banner() print_status() choice = input("请输入选项 (0-11):").strip() if choice == "0": print("已退出。") break if choice in actions: try: actions[choice]() if choice != "11": print("操作完成。若资源管理器未更新,可关闭已打开的文件夹窗口再试。") except OSError as e: print(f"操作失败: {e}") input("按 Enter 继续...") else: print("无效选项,请重新输入。") input("按 Enter 继续...") print() if __name__ == "__main__": if os.name != "nt": print("此脚本仅适用于 Windows。") sys.exit(1) main()
运行:
将上面文件保存为 manage_folder_background_menu.py
如果电脑中已经安装了 py. 通过 cmd 运行代码
python C:\Users\Administrator\Desktop\manage_folder_background_menu.py
浙公网安备 33010602011771号