中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

DOS批處理中%cd%與%~dp0的區別是什么

發布時間:2021-07-01 09:27:44 來源:億速云 閱讀:233 作者:小新 欄目:開發技術

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

問題描述

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

// 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都能用來表示當前目錄,但是他們在不同的使用場景下,功能卻不相同:

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

  • %~dp0代表的是當前批處理文件所在完整目錄(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,結果為

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

直接運行c.bat,結果為

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

從上面的結果可以看出:

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

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

// 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.batf.bat不在同一個盤符了,從e.bat切換當前工作目錄到f.bat直接使用cd是不行的,必須要使用:

cd /d "%~dp0"

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

問題總結

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

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

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

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

dos
AI

石景山区| 临邑县| 娱乐| 华亭县| 金堂县| 淅川县| 鄯善县| 榆林市| 宣汉县| 获嘉县| 东乌珠穆沁旗| 漳浦县| 德惠市| 视频| 宜州市| 保康县| 贡山| 龙州县| 莲花县| 华池县| 介休市| 灵川县| 澳门| 新津县| 邹平县| 疏附县| 贵溪市| 敦化市| 福泉市| 永德县| 许昌市| 云南省| 永福县| 祁东县| 上高县| 行唐县| 新营市| 江津市| 枞阳县| 清苑县| 蓬溪县|