DOS批處理中 cd 與 dp0的區別詳解

2022-09-06 17:03:06 字數 3896 閱讀 3308

**:

windows下批處理中%cd%和%~dp0都能用來表示當前目錄,但是他們在不同的使用場景下,功能卻不相同。下面這篇文章就來給大家詳細介紹了dos批處理中%cd%與%~dp0的區別,需要的朋友可以參考借鑑。

問題描述

假設我們要在批處理a.bat裡呼叫執行批處理b.batb.bat需要知道b.bat的當前位置,並執行run.exe,如下:?1

2345

6789

10// directory structure

// c:

//-a.bat

//-program

//-b.bat

//-run.exe

// a.bat

call"%cd%\program\b.bat"

// b.bat

"%cd%\run.exe"

那麼現在能不能成功執行run.exe呢?

問題分析

%cd%%~dp0都能用來表示當前目錄,但是他們在不同的使用場景下,功能卻不相同:

我們來看看下面的例子:?1

2345

6789

1011

// directory structure

// c:

//-c.bat

//-program

//-d.bat

// c.bat

call"%cd%\program\d.bat"

// d.bat

@echooff

echocd= %cd%

echodp0 = %~dp0

直接執行d.bat,結果為?1

2cd= c:\program

dp0 = c:\program\

直接執行c.bat,結果為?1

2cd= c:\

dp0 = c:\program\

從上面的結果可以看出:

執行d.bat時,當前工作目錄為d.bat所在目錄;

執行c.bat時,當前工作目錄為c.bat所在目錄,即使在呼叫d.bat後,該工作目錄依舊是c.bat所在目錄。

問題解決

讓我們再來看看問題描述中提及的問題——能不能成功執行run.exe呢?

答案是:不能。「%cd%\run.exe」表示的是「c:\run.exe」,並非「c:\program\run.exe」。那麼如何更改呢?

有兩種方案:?1

2345

6789

1011

1213

14// plan a

// change the current working directory

// a.bat

cd"%~dp0"

call"%cd%\program\b.bat"

// b.bat

cd"%~dp0"

"%cd%\run.exe"

// plan b

// using %~dp0 directly

// a.bat

call"%~dp0program\b.bat"

// b.bat

"%~dp0run.exe"

問題延伸

上面的解決方案中plan a通過更改當前目錄來解決該問題,可以這裡面也存在另外乙個問題,讓我們看下面的例子:?1

2345

6789

1011

1213

14// directory structure

// c:

//-program

//-f.bat

// d:

//-e.bat

// plan a

// change the current working directory

// e.bat

cd"%~dp0"

call"c:\program\f.bat"

// f.bat

cd"%~dp0"

"%cd%\run.exe"

現在e.batf.bat不在同乙個碟符了,從e.bat切換當前工作目錄到f.bat直接使用cd是不行的,必須要使用:?1

cd/d"%~dp0"

這個地方容易疏忽,切記不要犯錯。

問題總結

我們來重申下%~dp0%cd%的區別,%cd%%~dp0都能用來表示當前目錄,但是他們在不同的使用場景下,功能卻不相同:

從目前我們的使用情況來看,盡量使用%~dp0,不建議使用%cd%,有其他需求除外。

總結

DOS批處理中 cd 和 dp0的異同

在dos的批處理中,有時候需要知道當前的路徑。在dos中,有兩個環境變數可以跟當前路徑有關,乙個是 cd 乙個是 dp0。這兩個變數的用法和代表的內容是不同的。1.cd 可以用在批處理檔案中,也可以用在命令列中 展開後,是驅動器碟符 當前目錄,如在dos視窗中進入c dir目錄下面,輸入 echo ...

DOS批處理中 cd 和 dp0的區別

dos批處理中 cd 和 dp0的區別 在dos的批處理中,有時候需要知道當前的路徑。在dos中,有兩個環境變數可以跟當前路徑有關,乙個是 cd 乙個是 dp0。這兩個變數的用法和代表的內容是不同的。1.cd 可以用在批處理檔案中,也可以用在命令列中 展開後,是驅動器碟符 當前目錄,如在 dos視窗...

DOS批處理中 cd 和 dp0的區別

在dos的批處理中,有時候需要知道當前的路徑。在dos中,有兩個環境變數可以跟當前路徑有關,乙個是 cd 乙個是 dp0。這兩個變數的用法和代表的內容是不同的。1.cd 可以用在批處理檔案中,也可以用在命令列中 展開後,是驅動器碟符 當前目錄,如在 dos視窗中進入c dir目錄下面,www.2ct...