首頁  >  文章  >  後端開發  >  DOS批次中%cd%與%~dp0的區別詳解

DOS批次中%cd%與%~dp0的區別詳解

高洛峰
高洛峰原創
2017-02-14 13:33:502344瀏覽

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

問題描述

假設我們要在批次a.bat裡調用執行批次b.batb.bat需要知道​​b.bat的當前位置,並執行需要知道

​​b.bat

的當前位置,並執行

exe

,如下:

<pre class="brush:ps;">// directory structure // c: // -a.bat // -program // -b.bat // -run.exe // a.bat call &quot;%cd%\program\b.bat&quot; // b.bat &quot;%cd%\run.exe&quot;</pre>

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

問題分析

%cd%
  • %~dp0

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

  • %

    代表的是當前工作目錄(current working directory,variable);

  • %~dp0
代表的是當前批次檔所在完整目錄(the batch file's directory,fixed)。

我們來看看下面的例子:

<pre class="brush:ps;">// directory structure // c: // -c.bat // -program // -d.bat // c.bat call &quot;%cd%\program\d.bat&quot; // d.bat @echo off echo cd = %cd% echo dp0 = %~dp0</pre>

直接運行

d.bat

,結果為

cd = C:\program
dp0 = C:\program\

從上面的結果可以看出:

執行
    d.bat
  1. 時,當前工作目錄為

    d.bat所在目錄;

    目錄為
  2. c.bat
  3. 所在目錄,即使在呼叫

    d.bat後,該工作目錄依舊是c.bat所在目錄。 問題解決

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

答案是:不能。 “

%cd%run.exe ”表示的是“ C:run.exe

”,並非“

C:programrun.exe ”。那麼如何更改呢? 有兩種方案:

cd = C:\
dp0 = C:\program\

問題延伸

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

// 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"

現在

e.bat

f.bat

不在同一個盤符了,從

e.bat切換當前工作目錄到f.bat的,必須使用:<pre class="brush:ps;">// directory structure // c: // -program // -f.bat // d: // -e.bat // plan A // change the current working directory // e.bat cd &quot;%~dp0&quot; call &quot;c:\program\f.bat&quot; // f.bat cd &quot;%~dp0&quot; &quot;%cd%\run.exe&quot;</pre>這個地方容易疏忽,切記不要犯錯。

問題總結

我們來重申下

%~dp0%cd%
的區別,

%cd%

%%的區別, %cd%%~000%的使用場景下,功能卻不相同:

    %cd%
  • 代表的是當前工作目錄(current working directory,variable);

  • ~0000350000%。完整目錄(the batch file's directory,fixed)。
  • 從目前我們的使用情況來看,盡量使用

    %~dp0
  • ,不建議使用
%cd%

,有其他需求除外。 更多DOS批處理中%cd%與%~dp0的區別詳解相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn