首页 > 其他分享 >脚本学习:%cd%和%~dp0的区别

脚本学习:%cd%和%~dp0的区别

时间:2023-08-17 15:00:42浏览次数:31  
标签:脚本 cd% BAT 当前目录 dp0 学习

在编写自动化脚本过程中,经常会需要获取当前目录路径。

这里有两种方式,一种是%cd%,另一种是%~dp0,那么这两种方式有什么区别呢?今天就来具体讲一讲。

具体含义

%cd%:脚本执行的当前目录,需要注意的是,这里的当前目录有可能和脚本实际所在目录不一致。

%~dp0%:脚本文件所在的目录,注意,目录的路径为全路径,并且带结尾的\。

例如:我们编写一个简单的BAT脚本,命名为Test.bat,内容如下:

首先在D盘根目录下新建文件夹,命名为”脚本学习”,然后拷贝以上BAT脚本文件到此文件夹下。

测试场景1:在 D:\脚本学习 目录下,双击执行脚本

执行结果如下:

分析如下:

双击执行BAT脚本文件,对于%cd%来说,其值为当前目录,也即 D:\脚本学习,注意这里路径的结尾没有\。

对于%~dp0来说,其值为BAT脚本所在目录,即:D:\脚本学习\,注意这里的路径里带有\。

我们在E盘根目录下新建文件夹,也命名为”脚本学习”,然后将BAT脚本从 D:\脚本学习 移动到 E:\脚本学习 下。

测试场景2:从 D:\脚本学习 目录进入cmd窗口,并执行:E:\脚本学习\Test.bat

执行结果如下:

分析如下:

从 D:\脚本学习 目录进入cmd窗口,当前目录为 D:\脚本学习,所以虽然Test.bat位于 E:\脚本学习,但是%cd%仅会打印当前目录,也即 D:\脚本学习。

对于%~dp0来说,其值为BAT脚本所在目录,虽然当前目录为D:\脚本学习,但是%~dp0还是会打印脚本文件实际所在的路径,即:E:\脚本学习\

再次注意,这里的值是带有\号的。

使用范围

%cd%:可以在BAT脚本中使用,也可以在命令行窗口中使用。

%~dp0:仅可以在BAT脚本中使用。

我的建议

有时需要稳定的相对路径关系来编制自动化脚本,我们希望获取的当前目录路径与脚本的执行环境无关。由于%cd%和脚本执行的当前目录有关,所以BAT脚本在不同目录下执行的时候,其值会发生改变,而%~dp0始终指向BAT脚本文件所在路径,因此,尽量使用%~dp0来获取当前目录比较靠谱。

标签:脚本,cd%,BAT,当前目录,dp0,学习
From: https://www.cnblogs.com/bdqczhl/p/17637585.html

相关文章

  • es的迁移方案脚本
    备份记录#!/usr/bin/envbashsrcUrl="10.2.67.244:9400"dstUrl="10.2.38.201:9400"#Getallindicesindices_file=/opt/dump/indicescurl-XGET"http://elastic:f4SI8SVNOjzT8FBbmlgE@${srcUrl}/_cat/indices/"|awk'{print$3}&#......
  • DAMA-CDGA/CDGP数据治理认证8月20日开班啦!!!
    DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业竞争能力。DAMA是数据管理方面的认证,帮助数据从业者提升......
  • 2023年9月重庆/广州/深圳DAMA-CDGA/CDGP认证报名
    据DAMA中国官方网站消息,2023年度第三期DAMA中国CDGA和CDGP认证考试定于2023年9月23日举行。 报名通道现已开启,相关事宜通知如下: 考试科目: 数据治理工程师(CertifiedDataGovernanceAssociate,CDGA)数据治理专家(CertifiedDataGovernanceProfessional,CDGP) 考试时间: CDGA:2023......
  • 获取shell脚本所处路径
    WORK_DIR=$(cd$(dirname$0);pwd)WORK_DIR:变量,后续可用;$(dirname$0):获取shell脚本所处的文件夹路径;cd$(dirname$0):切换到shell脚本所处的文件夹;cd$(dirname$0);pwd:切换到shell脚本所处的文件夹后再执行pwd;为什么不直接WORK_DIR=$(pwd)因为不能确定执......
  • 一文搞懂油猴(篡改猴)脚本中window和unsafeWindow的关系
    先看第一段代码:特点是grantnone//==UserScript==//@nametest//@matchhttps://1.1.1.1///@grantnone//==/UserScript==(function(win){console.log(window)console.log(win)})(unsafeWindow);执行结果:Uncaught(inpromise)ReferenceError:unsafeW......
  • 添加阿里云CDN的步骤
    添加阿里云CDN的步骤1.创建好一个加速域名2.创建CDN域名alicdn.apecome.com这个地址,源站,还是设置的这个服务器123.57.242.103.修改【加速域名】的类型,从A记录改为CNAME4.如何判断,静态资源是否使用到了CDN1.查看是否有CNAME[root@master-61~]#pingalicdn.apecome......
  • shell脚本for循环、while循环、until循环
    1.AWK在Linux/UNIX系统中,awk是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令。而awk比较倾向于将一行分成多个字段然后进行处理。AWK信息的读入也是逐行.指定的匹配模式进行查找,对符合条件的内容进行格式化输出或......
  • SQL:DAC模式登陆SQL SERVER 2012 批量执行SQL 脚本文件
    rem将当前目录下的所有*.SQL文件执行一次,并将结果输出文件remfor循环执行SQL命令文件echo=======Begin===========for%%iin(*.sql)do(sqlcmd-A-SLOCALHOST-USA-Pyourpassword-iD:\SQL\IN\%%i-oD:\SQL\OUT\%%i@echoFileName%%i)echo=======end......
  • 用shell脚本设计的『扫雷』
    不知道为什么,这个脚本和CentOS7不兼容。载入脚本后,用WASD键控制光标移动,按空格挖开地块,挖到的数字是地块周围的地雷数量,挖到地雷后游戏失败;按F标记有地雷的地块,按E表示可能有地雷。已挖开的地块无法被标记。将所有地雷标记完毕后游戏胜利。按Q键退出游戏。无论如何退出游戏,脚......
  • Argo CD ApplicationSet
    ArgoCDApplicationSetApplicationSet介绍ApplicationSet控制器是一个Kubernetes控制器,添加了对ApplicationSetCustomResourceDefinition(CRD)的支持。该控制器实现了跨大量集群和monorepos内管理ArgoCD应用程序的自动化和更大的灵活性,此外,它还使多租户Kubernete......