确保从Excel运行批处理文件时在cmd.exe中使用相对路径
我有一个Excel文件,里面有一个按钮,可以用VB调用一个Shell命令:
Shell(ThisWorkbook.Path & "\python_script.bat", vbNormalFocus)
这个Shell命令会调用一个批处理文件,批处理文件会运行一个Python脚本:
python python_script.py
所有相关的文件(Excel文件、批处理文件、数据文件、Python文件)都放在同一个文件夹里,我们叫它sample_program
。因为我是在为别人做这个,所以我希望他们只需解压缩文件就能运行。
在Excel中测试时,我点击按钮,然后出现了这个错误:
C:\Users\<user_name>\Documents>python python_script.py
python: can't open file 'python_script.py': [Errno 2] No such file or directory
奇怪的是,尽管这些文件都在同一个地方,cmd.exe却是在我的用户目录下运行:C:\Users\<user_name>\Documents
我不想让cmd.exe使用这个路径;我希望它使用path\to\sample_program
这个文件夹。
我该如何设置相对路径,这样当我把这个文件夹转给别人时,无论他们把它放在哪里,它都能作为一个完整的单元正常工作呢?
2 个回答
1
你可以用 Environ("username")
来获取用户的登录名,所以对于你的例子(我猜是Windows 7系统)
Sub GetDir()
MsgBox "C:\Users\" & Environ("username") & "\Documents"
End Sub
你还可以使用 SpecialFolders 自动获取某些位置,这样不管是什么操作系统都可以做到,比如说
Sub GetPath()
Set wshShell = CreateObject("WScript.Shell")
Documents = wshShell.SpecialFolders("MyDocuments")
MsgBox Documents
End Sub
2
试试这个,如果 path\to\sample_program
和你的主驱动器在同一个盘上
Shell "cmd.exe /k cd " & ThisWorkbook.Path & "&&python_script.bat"
或者试试这个,如果 path\to\sample_program
不 在你的主驱动器上,或者你事先不知道的话
Shell "cmd.exe /k " & Left(ThisWorkbook.Path, 2) & "&&cd " & ThisWorkbook.Path & "&&python_script.bat"