用途:安装Python忘记点选路径选项,FFmpeg调用配置等等需求
源代码共享
import tkinter as tk
from tkinter import filedialog, messagebox
import os
import sys
import ctypes
import winreg
def is_admin():
"""检查是否以管理员权限运行"""
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
def normalize_windows_path(path):
"""将路径转换为Windows标准格式(使用反斜杠)"""
# 替换正斜杠为反斜杠,并确保没有重复的反斜杠
normalized = path.replace('/', '\\')
# 处理可能存在的重复反斜杠
while '\\\\' in normalized:
normalized = normalized.replace('\\\\', '\\')
return normalized
def add_to_path(folder_path):
"""将指定文件夹添加到系统PATH环境变量"""
try:
# 规范化路径为Windows格式
folder_path = normalize_windows_path(folder_path)
# 打开系统环境变量注册表键
with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,
r"SYSTEM\CurrentControlSet\Control\Session Manager\Environment",
0, winreg.KEY_ALL_ACCESS) as key:
# 获取当前的PATH值
current_path, _ = winreg.QueryValueEx(key, "Path")
# 规范化当前PATH中的路径以便比较
current_paths = [normalize_windows_path(p) for p in current_path.split(os.pathsep)]
# 检查是否已存在该路径
if folder_path in current_paths:
return False, "路径已存在于系统PATH中"
# 添加新路径到PATH
new_path = current_path + os.pathsep + folder_path
# 更新注册表
winreg.SetValueEx(key, "Path", 0, winreg.REG_EXPAND_SZ, new_path)
# 广播环境变量更改消息
ctypes.windll.user32.SendMessageTimeoutW(0xFFFF, 0x1A, 0, "Environment", 0, 1000, None)
return True, f"成功将路径 '{folder_path}' 添加到系统PATH"
except Exception as e:
return False, f"错误: {str(e)}"
def browse_folder():
"""打开文件夹选择对话框"""
folder_selected = filedialog.askdirectory()
if folder_selected:
# 将路径转换为Windows标准格式
folder_selected = normalize_windows_path(folder_selected)
entry_path.delete(0, tk.END)
entry_path.insert(0, folder_selected)
def add_to_path_action():
"""执行添加到PATH的操作"""
folder_path = entry_path.get().strip()
if not folder_path:
messagebox.showerror("错误", "请先选择一个文件夹")
return
if not os.path.isdir(folder_path):
messagebox.showerror("错误", "选择的路径不是一个有效的文件夹")
return
success, message = add_to_path(folder_path)
if success:
messagebox.showinfo("成功", message)
else:
messagebox.showerror("错误", message)
def restart_as_admin():
"""以管理员权限重新启动程序"""
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
# 创建主窗口
root = tk.Tk()
root.title("系统PATH环境变量设置工具 by 高山羊止")
root.geometry("600x220")
root.resizable(False, False)
# 检查管理员权限
if not is_admin():
response = messagebox.askyesno("需要管理员权限",
"此操作需要管理员权限。是否以管理员身份重新启动程序?")
if response:
restart_as_admin()
sys.exit()
else:
messagebox.showwarning("警告", "没有管理员权限,可能无法成功修改系统PATH")
# 创建界面元素
label_title = tk.Label(root, text="系统PATH环境变量设置工具", font=("宋体", 15, "bold"))
label_title.pack(pady=10)
frame_path = tk.Frame(root)
frame_path.pack(pady=10, padx=20, fill=tk.X)
label_path = tk.Label(frame_path, text="文件夹路径:")
label_path.pack(side=tk.LEFT)
entry_path = tk.Entry(frame_path, width=50)
entry_path.pack(side=tk.LEFT, padx=5, fill=tk.X, expand=True)
button_browse = tk.Button(frame_path, text="浏览...", command=browse_folder)
button_browse.pack(side=tk.RIGHT)
button_add = tk.Button(root, text="添加到系统PATH", command=add_to_path_action,
bg="lightblue", font=("宋体", 11, "bold"))
button_add.pack(pady=20)
label_note = tk.Label(root, text="注意: 此操作会将选定的文件夹添加到系统的PATH环境变量中\n路径将自动转换为Windows标准格式(使用反斜杠)",
fg="gray", font=("宋体", 9), justify=tk.LEFT)
label_note.pack(side=tk.BOTTOM, pady=5)
# 运行主循环
root.mainloop()
系统路径环境变量(PATH Environment Variable)详解
系统路径环境变量(通常简称 PATH)是操作系统(如 Windows、macOS、Linux)中的核心环境变量,用于告诉系统“在哪些文件夹中查找可执行程序(如 .exe、.sh、.py 等)”。当用户在命令行(如 Windows 的 CMD/PowerShell、macOS/Linux 的 Terminal)中输入一个命令(如 python、java、git)时,系统会自动遍历 PATH 中列出的所有目录,找到对应的可执行文件并运行;若未找到,则会提示“命令不存在”或“不是内部或外部命令”。
一、核心作用:解决“命令找不到”的核心问题
PATH 的本质是“系统级的文件搜索路径列表”,其核心价值体现在:
[ol]
[/ol]
二、不同操作系统的 PATH 特点
不同系统的 PATH 在“查看方式”“路径分隔符”“默认路径”上存在差异,具体对比如下:
[table]
[tr]
[td]特性[/td]
[td]Windows 系统[/td]
[td]macOS/Linux 系统[/td]
[/tr]
[tr]
[td]路径分隔符