批處理中獲取當前路徑的方法可能有好幾種,具體有幾種我沒有研究過,本文只是對其中的兩種之間的差別進行簡單說明
注:我的系統是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....