bat運行當前路徑下程序
批處理中獲取當前路徑的方法可能有好幾種,具體有幾種我沒有研究過,本文只是對其中的兩種之間的差別進行簡單說明
本文涉及的兩個當前路徑標示為:%cd%、%~dp0
註:我的系統是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則是對應命令所在的當前路徑
bat運行當前路徑下程序