bat執行當前路徑下程式

2022-07-17 18:15:12 字數 1287 閱讀 1208

批處理中獲取當前路徑的方法可能有好幾種,具體有幾種我沒有研究過,本文只是對其中的兩種之間的差別進行簡單說明

注:我的系統是win7旗艦版,其它系統沒有試過

我有兩個批處理檔案,分別是

e:/1.bat

e:/myproject/debug/autoreg.bat

其中1.bat呼叫autoreg.bat,內容如下:

call e:\myproject\debug\autoreg.bat

第二個批處理檔案autoreg.bat是用來註冊和它在同乙個目錄中的乙個控制項,內容如下:

regsvr32 my.ocx

直接雙擊autoreg.bat,可以成功註冊控制項,如果雙擊1.bat檔案,則提示註冊失敗,其中cmd視窗中顯示:

e:>regsvr32 my.ocx

這個顯示顯然不正確,實際應該是:

e:\myproject\debug>regsvr32 my.ocx

可以看出,1.bat呼叫autoreg.bat時,其當前路徑不是 e:\myproject\debug,而是e:\,所以註冊失敗

這個容易,直接在 my.ocx 的前面加上當前路徑即可,如下:

regsvr32 %cd%\my.ocx

雙擊autoreg.bat,註冊成功,再雙擊1.bat,結果還是註冊失敗,cmd視窗中顯示如下:

e:>regsvr32 e:\\my.ocx

這裡不僅僅是%cd%後面有無「\」的問題,而還是路徑不對,看來這個%cd%有點不太好用。

再用第二個,即%~dp0來試,把autoreg.bat檔案改成如下:

regsvr32 %~dp0my.ocx

注意,%~dp0後面不要那個「\」號,因為%~dp0是以「\」結尾的。(%cd%有點奇怪,在autoreg.bat中結尾是debug,而在1.bat中呼叫autoreg.bat時,卻又是以「\」結尾的,所以如果要使用%cd%,則其後必需加上「\」,否則直接雙擊autoreg.bat時,路徑就變成了 e:\myproject\debugmy.ocx)

雙擊autoreg.bat註冊成功,再雙擊1.bat也註冊成功

總結:%cd%是最初開始命令所在的當前路徑,而%~dp0則是對應命令所在的當前路徑

可執行程式當前路徑

cstring spath getmodulefilename null,spath.getbuffersetlength max path 1 max path spath.releasebuffer int npos npos spath.reversefind spath spath.left...

獲取程式當前路徑

expandfilename 返回檔案的全路徑 含驅動器 路徑 extractfileext 從檔名中抽取副檔名 extractfilename 從檔名中抽取不含路徑的檔名 extractfilepath 從檔名中抽取路徑名 extractfiledir 從檔名中抽取目錄名 extractfiled...

獲取本執行程式所在的當前路徑

1.獲取和設定當前目錄的完全限定路徑。string str system.environment.currentdirectory result c 3.獲取新的 process 元件並將其與當前活動的程序關聯的主模組的完整路徑,包含檔名。string str system.diagnostics....