在Excel中运行batch file时,确保在cmd.exe中使用相对path
我有一个Excel文件,带有一个在VB中调用Shell命令的button:
Shell(ThisWorkbook.Path & "\python_script.bat", vbNormalFocus)
Shell命令调用运行Python脚本的上述batch file:
python python_script.py
所有相关的文件(Excel文件,batch file,数据文件,Python文件)都位于同一个目录中,因此我将此文件称为sample_program
,因为我正在为其他人构build这个文件,我打算让它们简单地解压缩它并运行它。
在Excel中,当testing这个,我点击button,然后得到这个错误:
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; 我希望它使用path\to\sample_program
目录。
我如何得到这个使用相对path,所以当我把这个文件夹传给别人,并且把它放在任何地方,它将作为一个独立的单元?
试试这个,如果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"
你可以使用Environ("username")
来获取用户login名,所以对于你的示例(我认为是Windows 7)
Sub GetDir() MsgBox "C:\Users\" & Environ("username") & "\Documents" End Sub
您也可以使用SpecialFlder自动检索某些位置,而不pipe操作系统如何
Sub GetPath() Set wshShell = CreateObject("WScript.Shell") Documents = wshShell.SpecialFolders("MyDocuments") MsgBox Documents End Sub