VBA通過相對路徑(%~dp0)調用批處理文件(bat)運行RScrip


背景

vba中用Shell函數執行.bat文件,來調用RScript。每次換不同的電腦或者路徑,都需要重新設置路徑。利用%~dp0傳輸相對路徑時,發現vbalCurDir會影響結果。
這個

1. 條件設置:excel的當前路徑(CurDir)和excel文件本身不在同一個盤符

  • bat文件在E:\Desktop\1.bat
dir > openyes.txt
cd  %~dp0
dir > iamhere1.txt
cd /d %~dp0
dir > iamhere2.txt
  • excel文件在E:\Desktop\2.xlsm

2. 確認vba中的路徑

當前路徑

vba的立即窗口中運行Msgbox CurDir
返回什么都有可能,這里在F盤新建一個test文件夾,並設置為CurDir。不要設置 C盤,可能因為無法讀寫不能再現下面的代碼,要是沒有F盤,就換個盤。

ChDrive "F"
ChDir "F:\test"

再運行Msgbox CurDir,返回的是F:\test

ThisWorkbook.path

vba立即窗口運行 Msgbox ThisWorkbook.path
返回 E:\Desktop

3.vba中運行 bat 文件

立即窗口中運行
retval = Shell(ThisWorkbook.path & "\1.bat", 1)

運行結果:
openyes.txt文件在F:\test
iamhere1.txt也在 F:\test
iamhere2.txtE:\Desttop
說明:

  • 能夠找到並運行bat文件,bat運行后的起始路徑是 CurDir。
  • 如果要用cd修改,要加上/d,不然會因為在不同的盤失敗,所以iamhere1.txt還是在當前路徑。
  • 所以使用相對路徑的核心就是 cd /d %~dp0

相關知識

1. Shell函數

功能:運行可執行程序並在成功時返回表示程序的任務 ID 的 Variant (Double);否則返回零。
RetVal = Shell("C:\WINDOWS\NOTEPAD.EXE", 1) ' Open Notepad.

2. RScript

通過命令行運行R代碼,不知道說明用不着。

3. bat文件

bat文件是dos下的批處理文件,包含一條或多條命令。在CMD中輸入批處理文件名(當前路徑與bat文件路徑相同時)可運行。

4. %~dp0

獲得bat文件本身路徑的方式
%0表示bat文件本身
%~0表示去掉雙引號
%~dp0表示去掉雙引號,顯示d(drive)盤符和p(path)路徑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM