在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使用这个路径;我想让它使用pathtosample_program目录

我如何得到这个使用相对路径,所以当我转移这个文件夹给别人,他们把它放在任何地方,它将作为一个独立的单元工作?

如果pathtosample_program与您的主驱动器在同一驱动器上

请尝试此操作
Shell "cmd.exe /k cd " & ThisWorkbook.Path & "&&python_script.bat"
如果pathtosample_program而不是,或者您事先不知道 ,则使用

Shell "cmd.exe /k " & Left(ThisWorkbook.Path, 2) & "&&cd " & ThisWorkbook.Path & "&&python_script.bat"

您可以使用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

最新更新