看網上介紹區別,寫的好復雜,其實很簡單:
%cd% 在批處理和命令窗口都能使用。用於打印,當前工作路徑。
%~dp0% 則只能用於批處理中,用於獲得當前批處理文件所在的路徑。
做個試驗試一下:
@echo off echo this is %%cd%% %cd% echo this is %%~dp0 %~dp0 echo switch to another folder: cd d:\Program Files (x86) echo this is %%cd%% %cd% echo this is %%~dp0 %~dp0 pause
結果發現%cd% 是可以在腳本中通過cd 切換到別的目錄的,打印的路徑是動態的。
事實上,應該注意的是,使用的場景多半不同, cd 到不同的工作路徑,是dos常用操作。而%cd%就是為了得到當前的工作路徑而設置的。
但是,另外一種常用的需求就是獲取當前bat文件所在的路徑,那這個路徑就需要用%~dp0%。 這里有一點兒麻煩的情況就是bat1 再調用bat2, 到底獲取的是哪個路徑呢?
做個試驗,試一下便知道了:
t1.bat:
@echo off echo this is t1.bat echo %%~dp0%% get path: %~dp0% cd D:\learn\Bat\codes call t2.bat pause
t2.bat:
echo this is t2.bat echo %%~dp0%% get path : %~dp0% pause
t1在d盤根目錄,t2.bat 在D:\learn\Bat\codes。 執行t1.bat 執行結果是:
可見,是以當前命令所在的文件路徑為准的咯。
注意,批處理想把變量名稱本身, 要在外層在加一個%%。