确保从Excel运行批处理文件时在cmd.exe中使用相对路径

1 投票
2 回答
1726 浏览
提问于 2025-04-17 03:45

我有一个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"

撰写回答