Python代码通过任务计划程序运行时如何访问同目录下的子文件夹
问题根因
报错的核心原因有两个:
- 代码使用了相对路径,任务计划程序运行时默认工作目录是系统临时文件夹,不是脚本所在目录,所以无法识别相对路径下的
sheets文件夹 - 若你使用了映射的网络盘符,任务计划在非用户登录会话下运行时不会加载用户的盘符映射,因此无法访问共享路径
解决方案
1. 代码层面改用UNC绝对路径访问共享目录
直接使用完整的网络共享路径,不要用相对路径也不要用映射盘符,从根源避免路径识别问题,同时增加空列表判断,避免直接调用max抛错。修改后的代码参考:
import glob import os import pathlib # 直接指定共享目录的完整UNC路径,不要用相对路径或映射盘符 ROOT_DIR = r"\\192.168.1.119\Work\exporttoact" list_of_files = glob.glob(os.path.join(ROOT_DIR, 'sheets/**/*.xlsx'), recursive=True) # 先判断列表是否为空,避免异常 if not list_of_files: # 可在此处增加日志输出,方便后续排查问题 raise FileNotFoundError("未找到匹配的xlsx文件,请检查路径配置或共享目录权限") latest_file = max(list_of_files, key=os.path.getctime) filelocation = pathlib.Path(ROOT_DIR).resolve()
2. 任务计划程序配置调整
- 运行账户选择你平时手动执行脚本时用的用户账户,不要使用SYSTEM等内置系统账户,这类账户默认没有局域网共享路径的访问权限
- 如果勾选了「不管用户是否登录都要运行」选项,必须勾选「存储密码,以便用户登录时可访问网络资源」选项,同时保证该账户对
\\192.168.1.119\Work\exporttoact共享目录有可读权限 - 编辑任务的「操作」项,在「起始于(可选)」输入框中填写脚本所在的目录路径:
\\192.168.1.119\Work\exporttoact,确保脚本运行时的工作目录正确
3. 网络映射冲突解决
不需要额外用NET USE做盘符映射,直接用UNC路径访问即可完全规避重复映射的问题。如果必须要用映射盘符,可以在NET USE命令前增加盘符存在判断,同时指定/persistent:no参数,脚本运行完成后自动卸载映射,避免和用户已有的映射冲突。
内容的提问来源于stack exchange,提问作者Djavul Kai
相关产品推荐
相关产品推荐

