2011-10-05 115 views
1

在使用我有一個Excel與調用shell命令VB中的一個按鈕,提交:確保相對路徑cmd.exe的運行批處理文件從Excel中

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

試試這個,如果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" 
+0

良好的答案 - 謝謝 - 像魅力一樣工作...... – nicorellius

+0

+1提供所需的解決方案。 – brettdj

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 
+0

將這項工作,如果我給我的用戶的文件夾位置爲:'d: \測試\腳本\今天'例如?我想我正在嘗試這樣做,'cmd.exe'不使用用戶的Documents目錄,而是使用所有文件所在的路徑。 – nicorellius

+0

您是否創建了目錄代碼,然後將所有相關文件複製到它?從你的問題,我認爲文件將部署在網絡上,因此需要一個相對路徑 – brettdj

+0

對不起,更清晰......不,這些文件被手動添加到我的本地機器上的目錄。我打算將它們打包成一個ZIP文件,然後發送給某人。然後收件人將解壓並從解壓目錄所在的位置運行。在這種情況下,這些文件需要以解壓縮文件夾的根作爲應用程序的根目錄運行。 – nicorellius