DOS批處理中%cd%與%~dp0的區(qū)別詳解
問(wèn)題描述
假設(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呢?
問(wèn)題分析
%cd%和%~dp0都能用來(lái)表示當(dāng)前目錄,但是他們?cè)诓煌氖褂脠?chǎng)景下,功能卻不相同:
%cd%代表的是當(dāng)前工作目錄(current working directory,variable);%~dp0代表的是當(dāng)前批處理文件所在完整目錄(the batch file's directory,fixed)。
我們來(lái)看看下面的例子:
// 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
直接運(yùn)行d.bat,結(jié)果為
cd = C:\program dp0 = C:\program\
直接運(yùn)行c.bat,結(jié)果為
cd = C:\ dp0 = C:\program\
從上面的結(jié)果可以看出:
- 執(zhí)行
d.bat時(shí),當(dāng)前工作目錄為d.bat所在目錄; - 執(zhí)行
c.bat時(shí),當(dāng)前工作目錄為c.bat所在目錄,即使在調(diào)用d.bat后,該工作目錄依舊是c.bat所在目錄。
問(wèn)題解決
讓我們?cè)賮?lái)看看問(wèn)題描述中提及的問(wèn)題——能不能成功執(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"
問(wèn)題延伸
上面的解決方案中plan A通過(guò)更改當(dāng)前目錄來(lái)解決該問(wèn)題,可以這里面也存在另外一個(gè)問(wèn)題,讓我們看下面的例子:
// 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.bat和f.bat不在同一個(gè)盤符了,從e.bat切換當(dāng)前工作目錄到f.bat直接使用cd是不行的,必須要使用:
cd /d "%~dp0"
這個(gè)地方容易疏忽,切記不要犯錯(cuò)。
問(wèn)題總結(jié)
我們來(lái)重申下%~dp0和%cd%的區(qū)別, %cd%和%~dp0都能用來(lái)表示當(dāng)前目錄,但是他們?cè)诓煌氖褂脠?chǎng)景下,功能卻不相同:
%cd%代表的是當(dāng)前工作目錄(current working directory,variable);%~dp0代表的是當(dāng)前批處理文件所在完整目錄(the batch file's directory,fixed)。
從目前我們的使用情況來(lái)看,盡量使用%~dp0,不建議使用%cd%,有其他需求除外。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
欄 目:DOS/BAT
本文標(biāo)題:DOS批處理中%cd%與%~dp0的區(qū)別詳解
本文地址:http://www.jygsgssxh.com/a1/DOS_BAT/10040.html
您可能感興趣的文章
- 01-10DOS下查看硬盤分區(qū)該使用什么命令
- 01-10使用批處理實(shí)現(xiàn)軟件的自動(dòng)安裝以安裝搜狗拼音為例
- 01-10通過(guò)批處理修改DNS的代碼(推薦)
- 01-10windows使用批處理發(fā)布web到tomcat并啟動(dòng)tomcat腳本分享
- 01-10再談DOS批處理下格式化日期字符串的三種方法(詳解)
- 01-10用批處理一鍵安裝兩種擴(kuò)展名的Windows系統(tǒng)補(bǔ)丁
- 01-10ip地址切換批處理腳本分享
- 01-10dos命令行不能輸入中文怎么辦該如何解決
- 01-10批處理?xiàng)钶x三角效果實(shí)現(xiàn)代碼
- 01-10將批處理文件注冊(cè)成服務(wù)在系統(tǒng)啟動(dòng)的時(shí)候自動(dòng)調(diào)用


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10DOS下查看硬盤分區(qū)該使用什么命令
- 01-10使用批處理實(shí)現(xiàn)軟件的自動(dòng)安裝以安
- 01-10后臺(tái)運(yùn)行bat定時(shí)器程序示例分享
- 01-10通過(guò)批處理修改DNS的代碼(推薦)
- 01-10dota2服務(wù)器ping測(cè)試腳本分享
- 01-10再談DOS批處理下格式化日期字符串的
- 01-10windows使用批處理發(fā)布web到tomcat并啟動(dòng)
- 01-10win7怎么設(shè)定關(guān)閉顯示器時(shí)間
- 01-10屏蔽up鍵禁止游戲運(yùn)行腳本分享
- 01-10win7創(chuàng)建wifi熱點(diǎn)腳本分享
隨機(jī)閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實(shí)例總結(jié)


