**:
windows下批處理中%cd%和%~dp0都能用來表示當前目錄,但是他們在不同的使用場景下,功能卻不相同。下面這篇文章就來給大家詳細介紹了dos批處理中%cd%與%~dp0的區別,需要的朋友可以參考借鑑。
問題描述
假設我們要在批處理a.bat裡呼叫執行批處理b.bat
,b.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
@
echo
off
echo
cd
= %
cd
%
echo
dp0 = %~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.bat
和f.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...