如何解决通过Python调用Wscript.exe运行循环型VBScript时出现的80070002文件未找到错误?
解决Python调用循环VBScript时的文件找不到错误(错误80070002)
嘿,我来帮你搞定这个问题!你遇到的错误80070002其实是工作目录不匹配搞的鬼,咱们一步步拆解原因和解决方案:
问题到底出在哪?
当你直接双击runme.vbs时,系统会把VBS所在的extras文件夹作为它的工作目录,所以VBS里的WSHShell.Run "runme.vbs"能顺利找到自己。
但用Python的subprocess.Popen启动wscript.exe时,VBS的工作目录变成了Python脚本的当前工作目录(也就是你运行Python脚本的那个文件夹),而不是extras文件夹。这时候VBS再找runme.vbs,自然就找不到了,于是抛出“找不到文件”的错误。
两种简单的修复方法
方法1:给VBScript加上绝对路径(最靠谱)
修改你的runme.vbs,让它获取自己的绝对路径,不管在哪运行都能找到自己:
X = MsgBox("Hello world!", 64) Set WSHShell = WScript.CreateObject("WScript.Shell") ' 获取当前VBS文件的完整绝对路径 scriptFullPath = WScript.ScriptFullName WSHShell.Run scriptFullPath
这样不管是双击运行,还是被Python调用,VBS都能精准定位到自己,循环就不会出错了。
方法2:修改Python脚本,指定工作目录
如果你不想改VBS,也可以在Python调用subprocess时,强制把工作目录设置为extras文件夹,这样VBS运行时的工作目录就和它自己所在的文件夹一致了:
import os, subprocess workingdir = os.getcwd() programname = "wscript.exe" filename = "runme.vbs" # 拼接出extras文件夹的路径 extras_folder = os.path.join(workingdir, "extras") # 拼接VBS文件的绝对路径(也可以直接用filename,因为指定了cwd) file_path = os.path.join(extras_folder, filename) print(file_path) # 关键:用cwd参数指定工作目录为extras文件夹 subprocess.Popen([programname, filename], cwd=extras_folder)
小提醒
- 方法1更通用,就算以后把VBS移到别的文件夹,也不用改代码;
- 方法2要确保Python脚本能正确找到
extras文件夹,如果Python脚本不在extras的上级目录,可能需要调整路径拼接逻辑。
内容的提问来源于stack exchange,提问作者TheStupidDev
相关产品推荐
相关产品推荐

