DOS批處理中%cd%與%~dp0的區(qū)別是什么-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)DOS批處理中%cd%與%~dp0的區(qū)別是什么的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

站在用戶的角度思考問題,與客戶深入溝通,找到烏拉特后網(wǎng)站設(shè)計與烏拉特后網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋烏拉特后地區(qū)。

問題描述


假設(shè)我們要在批處理a.bat里調(diào)用執(zhí)行批處理b.bat,b.bat需要知道b.bat的當(dāng)前位置,并執(zhí)行run.exe,如下:

// directory structure
// c:
// -a.bat
// -program
//  -b.bat
//  -run.exe
// a.bat
call "%cd%\program\b.bat"
// b.bat
"%cd%\run.exe"

那么現(xiàn)在能不能成功執(zhí)行run.exe呢?

問題分析


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

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

  • %~dp0代表的是當(dāng)前批處理文件所在完整目錄(the batch file's directory,fixed)。


我們來看看下面的例子:

// 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,結(jié)果為

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

直接運行c.bat,結(jié)果為

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

從上面的結(jié)果可以看出:

  1. 執(zhí)行d.bat時,當(dāng)前工作目錄為d.bat所在目錄;

  2. 執(zhí)行c.bat時,當(dāng)前工作目錄為c.bat所在目錄,即使在調(diào)用d.bat后,該工作目錄依舊是c.bat所在目錄。

問題解決


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

答案是:不能。“%cd%\run.exe ”表示的是“C:\run.exe ”,并非“C:\program\run.exe ”。那么如何更改呢?

有兩種方案:

// 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通過更改當(dāng)前目錄來解決該問題,可以這里面也存在另外一個問題,讓我們看下面的例子:

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

現(xiàn)在e.batf.bat不在同一個盤符了,從e.bat切換當(dāng)前工作目錄到f.bat直接使用cd是不行的,必須要使用:

cd /d "%~dp0"

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

問題總結(jié)


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

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

  • %~dp0代表的是當(dāng)前批處理文件所在完整目錄(the batch file's directory,fixed)。

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

感謝各位的閱讀!關(guān)于“DOS批處理中%cd%與%~dp0的區(qū)別是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

網(wǎng)頁題目:DOS批處理中%cd%與%~dp0的區(qū)別是什么-創(chuàng)新互聯(lián)
當(dāng)前地址:http://muchs.cn/article18/dpphdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)站收錄、響應(yīng)式網(wǎng)站、網(wǎng)站維護(hù)網(wǎng)站內(nèi)鏈、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)