首页 > 代码库 > dos 批处理中%cd% 和%~dp0的区别

dos 批处理中%cd% 和%~dp0的区别

看网上介绍区别,写的好复杂,其实很简单:

%cd%  在批处理和命令窗口都能使用。用于打印,当前工作路径。

%~dp0% 则只能用于批处理中,用于获得当前批处理文件所在的路径。

 

做个试验试一下:

@echo off     echo this is %%cd%%  %cd%     echo this is %%~dp0 %~dp0   echo switch to another folder:cd d:\Program Files (x86)echo this is %%cd%%  %cd%     echo this is %%~dp0 %~dp0 pause

结果发现%cd% 是可以在脚本中通过cd 切换到别的目录的,打印的路径是动态的。

 

事实上,应该注意的是,使用的场景多半不同,  cd 到不同的工作路径,是dos常用操作。而%cd%就是为了得到当前的工作路径而设置的。

 

 

但是,另外一种常用的需求就是获取当前bat文件所在的路径,那这个路径就需要用%~dp0%。 这里有一点儿麻烦的情况就是bat1 再调用bat2, 到底获取的是哪个路径呢?

做个试验,试一下便知道了:

t1.bat:

@echo offecho this is t1.batecho %%~dp0%% get path: %~dp0% cd D:\learn\Bat\codescall t2.batpause

 

t2.bat: 

echo this is t2.batecho %%~dp0%% get path : %~dp0%pause

 

t1在d盘根目录,t2.bat 在D:\learn\Bat\codes。  执行t1.bat 执行结果是:

可见,是以当前命令所在的文件路径为准的咯。

 

注意,批处理想把变量名称本身, 要在外层在加一个%%。

dos 批处理中%cd% 和%~dp0的区别