全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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%,有其他需求除外。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


# 批处理  # dp0  # dos  # cd  # DOS批处理中%cd%和%~dp0的异同分析  # 的是  # 让我们  # 都能  # 批处理文件  # 要在  # 再来  # 来看看  # 可以看出  # 一个问题  # 这篇文章  # 有两种  # 这里面  # 如何更改  # 必须要  # 有疑问  # ps  # call  # brush  # structure 


相关文章: 如何自定义建站之星网站的导航菜单样式?  建站之星后台密码遗忘?如何快速找回?  如何通过服务器快速搭建网站?完整步骤解析  网站制作需要会哪些技术,建立一个网站要花费多少?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  如何高效生成建站之星成品网站源码?  建站之星如何实现五合一智能建站与营销推广?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  建站主机与虚拟主机有何区别?如何选择最优方案?  北京网站制作公司哪家好一点,北京租房网站有哪些?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  如何用VPS主机快速搭建个人网站?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  在线教育网站制作平台,山西立德教育官网?  定制建站哪家更专业可靠?推荐榜单揭晓  建站主机类型有哪些?如何正确选型  佛山企业网站制作公司有哪些,沟通100网上服务官网?  ,sp开头的版面叫什么?  微信推文制作网站有哪些,怎么做微信推文,急?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  建站主机选哪种环境更利于SEO优化?  如何做网站制作流程,*游戏网站怎么搭建?  如何快速搭建支持数据库操作的智能建站平台?  建站之星导航配置指南:自助建站与SEO优化全解析  想学网站制作怎么学,建立一个网站要花费多少?  广州建站公司哪家好?十大优质服务商推荐  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  如何确保西部建站助手FTP传输的安全性?  如何撰写建站申请书?关键要点有哪些?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  北京专业网站制作设计师招聘,北京白云观官方网站?  ,南京靠谱的征婚网站?  宁波免费建站如何选择可靠模板与平台?  如何快速搭建个人网站并优化SEO?  如何用PHP快速搭建CMS系统?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何在建站之星绑定自定义域名?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  实例解析Array和String方法  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  大连 网站制作,大连天途有线官网?  如何在云指建站中生成FTP站点?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。