%CD%:Current Directory, 當前工作目錄位置
%~dp0:批次檔存在的目錄位置
請試著執行下面例子感受兩者間的差異:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| @ECHO OFF
CLS
REM ================
REM == 先比較效果 ==
REM ================
ECHO ===============================================
ECHO == [Step1] 看起來沒什麼不同, 除了結尾的斜線 ...
ECHO ===============================================
ECHO %%CD%% = %CD%
ECHO %%~dp0 = %~dp0
REM ==========================
REM == 切換工作目錄再做比較 ==
REM ==========================
IF NOT EXIST TEMP MKDIR TEMP
CD TEMP
ECHO ===============================================
ECHO == [Step2] 切換工作目錄後, 發生差異了!
ECHO ===============================================
ECHO %%CD%% = %CD%
ECHO %%~dp0 = %~dp0
CD ..
:CLEAN
RMDIR /S /Q TEMP
|
上面例子可以明確知道:
- %~dp0表示批次檔所存在的位置, 是不會因切換工作目錄而改變。
- %CD%表示的是當前工作目錄位置, 如果用CD之類的指令切換工作目錄, 則%CD%會改變成對應的目錄。
關於
%~dp0其實是
%0參數的衍伸用法(可以使用
CALL /?查閱詳細說明)
首先執行下面例子先看看結果:
1
2
3
4
5
6
7
8
| @ECHO OFF
CLS
ECHO %%0 = %0
ECHO %%~d0 = %~d0
ECHO %%~p0 = %~p0
ECHO %%~n0 = %~n0
ECHO %%~x0 = %~x0
|
從
CALL /?的說明頁面中, 得知在參數%n(%0, %1, ... %9)之間加了波浪符號(~)與相關的修飾字詞後, 就會有擴充的支援。
- %0:第0個參數, 表示批次檔本身。
- %~d0:Dirver, 批次檔存在的磁碟機代號。
- %~p0:Path, 批次檔的路徑位置(不包含磁碟機代號)。
- %~n0:批次檔的檔案名稱。
- %~x0:批次檔的副檔名。
- 所有的修飾字詞可以混搭使用, 所以%~dp0即是批次檔所在的完整路徑。
- 修飾字詞還有~f, ~a, ...等, 請參考程式說明頁面。