a.bat內容為
cd /d %~dp0
在這裡
cd /d %~dp0的意思就是cd /d d:\qq
%0代表批處理本身 d:\qq\a.bat
~dp是變數擴充
d既是擴充到分區號 d:
p就是擴充到路徑 \qq
dp就是擴充到分區號路徑 d:\qq
擴充變數文法詳解:
:: ~I - 刪除任何引號("),擴充 %I
:: %~fI - 將 %I 擴充到一個完全合格的路徑名
:: %~dI - 僅將 %I 擴充到一個磁碟機代號
:: %~pI - 僅將 %I 擴充到一個路徑
:: %~nI - 僅將 %I 擴充到一個檔案名稱
:: %~xI - 僅將 %I 擴充到一個副檔名
:: %~sI - 擴充的路徑只含有短名
:: %~aI - 將 %I 擴充到檔案的檔案屬性
:: %~tI - 將 %I 擴充到檔案的日期/時間
:: %~zI - 將 %I 擴充到檔案的大小
:: %~$PATH:I - 尋找列在路徑環境變數的目錄,並將 %I 擴充到找到的第一個完全合格的名稱。如果環境變數名未被定義,或者沒有找到檔案,此按鍵組合會擴充到Null 字元串
:: 可以組合修飾符來得到多重結果:
:: %~dpI - 僅將 %I 擴充到一個磁碟機代號和路徑
:: %~nxI - 僅將 %I 擴充到一個檔案名稱和副檔名
:: %~fsI - 僅將 %I 擴充到一個帶有短名的完整路徑名
:: %~dp$PATH:i - 尋找列在路徑環境變數的目錄,並將 %I 擴充
:: 到找到的第一個磁碟機代號和路徑。
:: %~ftzaI - 將 %I 擴充到類似輸出線路的 DIR
%~dp0 VS %cd%
%cd% is available either to a batch file or at the command prompt and expands to the drive letter and path of the current directory (which can change e.g. by using the CD command)
%~dp0 is only available within a batch file and expands to the drive letter and path in which that batch file is located (which cannot change). It is obtained from %0 which is the batch file's name.
An experiment like the following shows the difference
Here is D:\dirshow.bat:
Code:
@echo off
echo this is %%cd%% %cd%
echo this is %%~dp0 %~dp0
Run it from C:\ and this is what you see
Code:
C:\>D:\dirshow.bat
this is %cd% C:\
this is %~dp0 D:\