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

发布时间 2023-08-17 15:00:50作者: 巴蒂青葱

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

这里有两种方式,一种是%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来获取当前目录比较靠谱。