Python复制脚本到Windows启动目录报PermissionError如何解决
问题根因
触发PermissionError的核心原因不是目录访问权限不足,而是代码存在两处逻辑错误:
shutil.copyfile的目标参数要求传入包含文件名的完整文件路径,你传入的是启动文件夹本身的目录路径,函数会尝试将文件夹作为文件打开写入,直接触发权限类报错。- 即使路径修正正确,直接将
.py脚本复制到启动目录也无法实现开机自启:Windows启动项默认不会自动调用Python解释器执行py文件,大概率会用默认关联的文本编辑器打开脚本,而非运行。
修正实现代码
无需管理员权限即可运行的稳定实现方案如下:
from shutil import copyfile import os import sys from getpass import getuser # 获取当前脚本的真实绝对路径,避免工作目录变动导致路径识别错误 current_script = os.path.abspath(sys.argv[0]) # 定位当前用户的启动目录 startup_folder = f"C:/Users/{getuser()}/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup" # 1. 将脚本复制到启动目录,目标参数补全完整文件名 target_script = os.path.join(startup_folder, "auto_run_task.py") copyfile(current_script, target_script) # 2. 生成bat引导脚本,保证开机时自动调用Python解释器运行脚本 bat_file = os.path.join(startup_folder, "start_auto_task.bat") python_path = sys.executable # 获取当前环境的Python解释器完整路径 with open(bat_file, "w", encoding="utf-8") as f: f.write(f'@echo off\nstart "" "{python_path}" "{target_script}"\n')
验证说明
- 代码运行后按
Win+R组合键,输入shell:startup回车即可打开启动目录,确认目录下存在auto_run_task.py和start_auto_task.bat两个文件即配置生效。 - 不需要以管理员身份运行脚本,当前用户默认对自身的Startup文件夹拥有完整读写权限,之前的报错和系统权限限制无关。
- 如果不需要复制脚本文件,也可以直接在bat文件中写入原脚本的绝对路径,省去文件复制步骤。
内容的提问来源于stack exchange,提问作者Sapphire Smith
相关产品推荐
相关产品推荐

