我們時常使用bat腳本去處理一些事情,有事bat中的命令需要以管理員的身份運行,但是運行後文件的目錄自動定位到了C:\Windows\system32下,而不再腳本所在的目錄下。 這是我的文件目錄,WindosActive.bat腳本會讀取WindosSerial.ini中的文件信息,但是腳本中的有 ...
我們時常使用bat腳本去處理一些事情,有事bat中的命令需要以管理員的身份運行,但是運行後文件的目錄自動定位到了C:\Windows\system32下,而不再腳本所在的目錄下。
這是我的文件目錄,WindosActive.bat腳本會讀取WindosSerial.ini中的文件信息,但是腳本中的有些命令要以管理員的身份才可以正常運行。如果直接右鍵管理員運行的目錄會定位到C:\Windows\system32。然後提示WindosSerial.ini文件不存在。
我們用echo %cd% 輸出當前目錄:
那麼有沒有其他方法呢?
使用變數擴充 的方法,讀取出當前文件的目錄,然後cd過去:
@echo off if not "%OS%"=="Windows_NT" exit title WindosActive echo 當前目錄:%cd% echo 變數擴充: %~dp0 cd /D %~dp0 echo 更改後的目錄:%cd% pause
有關其他變數擴充的知識:
@echo off if not "%OS%"=="Windows_NT" exit title WindosActive echo. echo 將 ^%%I 擴充到一個完全合格的路徑名 echo %~f0 echo. echo 僅將 ^%%I 擴充到一個驅動器號 echo %~d0 echo. echo 僅將 ^%%I 擴充到一個路徑 echo %~p0 echo. echo 僅將 ^%%I 擴充到一個驅動器和路徑 echo %~dp0 echo. echo 僅將 ^%%I 擴充到一個文件名 echo %~n0 echo. echo 僅將 ^%%I 擴充到一個文件擴展名 echo %~x0 echo. echo 擴充的路徑只含有短名 echo %~s0 echo. echo 將 ^%%I 擴充到文件的文件屬性 echo %~a0 echo. echo 將 ^%%I 擴充到文件的日期/時間 echo %~t0 echo. echo 將 ^%%I 擴充到文件的大小 echo %~z0 echo. echo 查找列在路徑環境變數的目錄,並將 ^%%I 擴充到找到的第一個完全合格的名稱。如果環境變數名 未被定義,或者沒有找到文件,此組合鍵會擴充到 空字元串 echo %~$PATH:0 echo. echo 組合擴展: echo 驅動器+路徑+文件名 +文件擴展名 +文件屬性 +日期/時間 +文件的大小 echo %~dpnxatz0 echo. echo 驅動器+路徑+文件名 +文件擴展名 +文件屬性 +日期/時間 +文件的大小+ 短名 echo %~dpnxatzs0 echo. pause
其中的變數擴充可以隨意組合。