问题
在编写自动化脚本过程中,经常会需要获取当前目录路径。
这里有两种方式,一种是%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来获取当前目录比较靠谱。