问题描述

假设我们要在批处理a.bat里调用执行批处理b.bat,b.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\
从上面的结果可以看出:
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.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.bat和f.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小时内与您取得联系。