2012/7/25

【批次檔】%CD% 與 %~dp0

%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

上面例子可以明確知道:

  1. %~dp0表示批次檔所存在的位置, 是不會因切換工作目錄而改變。
  2. %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)之間加了波浪符號(~)與相關的修飾字詞後, 就會有擴充的支援。

  1. %0:第0個參數, 表示批次檔本身。
  2. %~d0:Dirver, 批次檔存在的磁碟機代號。
  3. %~p0:Path, 批次檔的路徑位置(不包含磁碟機代號)。
  4. %~n0:批次檔的檔案名稱。
  5. %~x0:批次檔的副檔名。
  6. 所有的修飾字詞可以混搭使用, 所以%~dp0即是批次檔所在的完整路徑。
  7. 修飾字詞還有~f, ~a, ...等, 請參考程式說明頁面。

2 則留言:

  1. 版主 你好

    之前用
    start /max excel.exe
    後來..
    因 dde 作業會有所衝突

    可以,
    懇請 幫忙寫一個批次檔嗎?
    謝謝~

    作業是

    1.執行 Win鍵+R (不知這指令是??)
    2.執行 excel /x

    麻煩幫幫忙 感恩~~

    回覆刪除