Q:在Win7/Win10中以管理員身份運行在cmd/bat腳本時,如何獲取當前腳本文件所在目錄?
安全
當咱們在Win7/Win10中使用鼠標右鍵的「以管理員身份運行」以管理員身份運行cmd/bat腳本時,系統默認進入的目錄是C:\Windows\System32目錄,所以cmd腳本文件中的相應命令因路徑不對提示找不到要執行的程序文件等提示。spa
netpay_Service.exe -install netpay_Monitor.exe -installA:解決辦法:使用cd /d %~dp0,先進入cmd/bat腳本所在的目錄,再去執行其餘命令。
netpay_Service.exe -install netpay_Monitor.exe -install
這個腳本在xp、2000、2003等系統中均可以正常雙擊運行。在win7/Win10系統中雙擊運行時,會以普通用戶身份運行,此時所獲取的文件路徑的確是當前路徑,而不是C:\Windows\System32。可是運行到安裝netpay_Service.exe -install 的系統服務時,普通用戶顯然權限是不夠的。命令行
因而在InstllSvc_En.cmd右鍵選擇「以管理員身份運行」,此時又會出問題,win7/win10可能出於安全問題考慮,此時得到的目錄是C:\Windows\System32,因而提示netpay_Service.exe命令無效或程序文件不存在,執行出錯。blog
此時在腳本開始嘗試加入命令cd %cd%,來獲取當前路徑,實驗得知,這行語句在xp等系統中有效,可是在win7/win10中依然無效。獲得的目錄依然是C:\Windows\System32。百度一下才知道要使用cd /d %~dp0命令來獲取腳本所在的目錄。在腳本最開始添加cd /d %~dp0便可,以下:字符串
cd /d %~dp0 netpay_Service.exe -install netpay_Monitor.exe -install
在Windows XP~Windows 10系統上運行此腳本,確認都沒有問題。下面對命令中涉及到的參數作一解釋。cmd
1、關於cd的/d參數一般咱們在xp系統中打開cmd窗口時,會顯示it
C:\users\Administrator>class
若是咱們執行「cd e:\xxx」命令,發現目錄依然仍是在C:\users\Administrator變量
此時,咱們鍵入e:,不但會切換到d盤,並且會會發現E盤上的當前目錄爲e:/xxx。百度
C:\users\Administrator>cd e:\xxxcd %~dp0 就是進入批處理所在目錄了