2008-09-24 110 views

回答

53

雷蒙德陳有幾個想法:

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx

這裏轉引全因爲MSDN檔案往往是有些不可靠:

最簡單的辦法是使用%CD%僞變量。它擴展到當前工作目錄的 。

set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory

(當然,目錄保存/恢復會更容易有 已經完成與pushd/popd,但在這裏,這不是問題的關鍵。)

%CD%竅門即使從命令行也很方便。例如,I 經常發現自己在一個目錄中有一個文件,我想要 對其進行操作,但是......哦,我需要chdir到 才能執行該操作。

set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args

(我喜歡用%_%作爲我的刮環境變量。)

SET /?類型看到由命令 處理器提供的其它僞變量。

而且在文章中的評論是非常值得的掃描比如這一個:

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741

這包括使用%〜DP0:

如果你想知道批處理文件的位置:%~dp0

%0是批處理文件的名稱。 ~dp給出了指定參數的驅動和路徑 。

+12

這並不回答這個問題。 %CD%給出當前目錄,而要求的是腳本的目錄。 – ketorin 2008-10-07 11:58:49

+3

** @ ketorin:**這個**確實回答了這個問題。如果腳本自身在使用過程中改變了目錄(pushd/cd/..),%CD%將會改變,但**%〜dp0 **將**不會**改變並且總是指向腳本所在的位置。 – Jay 2009-09-08 17:18:37

135

這相當於腳本的路徑:

%~dp0 

它使用批處理參數擴展語法。參數0始終是腳本本身。

如果您的腳本存儲在C:\example\script.bat,則%~dp0評估爲C:\example\

ss64.com有關於參數擴展語法的更多信息。以下是相關摘錄:

您可以在命令行中使用%後跟數字位置來獲取任何參數的值。

[...]

當一個參數用於提供文件名然後將下面的擴展語法可以應用於:

[...]

%〜D1展開%1到一個驅動器號 - C:

[...]

%〜P1展開%1的路徑只有如\ utils \這包括一個尾部\,它可能被某些命令解釋爲轉義字符。

[...]

修飾符以上可以組合:

%〜DP1展開%1到驅動器號和路徑僅

[...]

您可以使用%0獲取批處理腳本本身的路徑名,參數擴展名可以應用於此,因此%〜dp0將返回批處理腳本的驅動器和路徑,例如女:\腳本\

1
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d 

pushd %curdir% 

Source