国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > BAT > 正文

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

2020-06-09 14:03:03
字體:
來源:轉載
供稿:網友

問題描述

假設我們要在批處理a.bat里調用執行批處理b.bat,b.bat需要知道b.bat的當前位置,并執行run.exe,如下:

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

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

問題分析

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

%cd%代表的是當前工作目錄(current working directory,variable); %~dp0代表的是當前批處理文件所在完整目錄(the batch file's directory,fixed)。

我們來看看下面的例子:

// directory structure// c:// -c.bat// -program//  -d.bat// c.batcall "%cd%/program/d.bat"http:// d.bat@echo offecho cd = %cd%echo dp0 = %~dp0

直接運行d.bat,結果為

cd = C:/programdp0 = C:/program/

直接運行c.bat,結果為

cd = 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 ”。那么如何更改呢?

有兩種方案:

// plan A// change the current working directory// a.batcd "%~dp0"call "%cd%/program/b.bat"http:// b.batcd "%~dp0""%cd%/run.exe"http:// plan B// using %~dp0 directly// a.batcall "%~dp0program/b.bat"http:// b.bat"%~dp0run.exe"

問題延伸

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

// directory structure// c:// -program//  -f.bat// d:// -e.bat// plan A// change the current working directory// e.batcd "%~dp0"call "c:/program/f.bat"http:// f.batcd "%~dp0""%cd%/run.exe"

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

cd /d "%~dp0"

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

問題總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵川县| 志丹县| 富源县| 沅江市| 西畴县| 仪征市| 邻水| 顺义区| 获嘉县| 时尚| 金湖县| 远安县| 星座| 潮州市| 湖北省| 望江县| 绍兴县| 辛集市| 阳朔县| 故城县| 石棉县| 额尔古纳市| 灵山县| 柳林县| 丹棱县| 民丰县| 高雄县| 松江区| 扬州市| 吉林省| 闸北区| 和林格尔县| 清新县| 日照市| 三门峡市| 兰西县| 阿合奇县| 集贤县| 云阳县| 呈贡县| 临汾市|