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

%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 off
echo this is t1.bat
echo %%~dp0%% get path: %~dp0%
cd D:\learn\Bat\codes
call t2.bat
pause

t2.bat:

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

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

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

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

dos 批处理中%cd% 和%~dp0%的区别的更多相关文章

  1. DOS批处理中%cd%和%~dp0的区别

    DOS批处理中%cd%和%~dp0的区别   在DOS的批处理中,有时候需要知道当前的路径. 在DOS中,有两个环境变量可以跟当前路径有关,一个是%cd%, 一个是%~dp0.       这两个变量 ...

  2. DOS批处理中%cd%和%~dp0的区别[forward]

    DOS批处理中%cd%和%~dp0的区别   在DOS的批处理中,有时候需要知道当前的路径. 在DOS中,有两个环境变量可以跟当前路径有关,一个是%cd%, 一个是%~dp0.      这两个变量的 ...

  3. DOS批处理中%cd%与%~dp0的区别详解

    转载:https://www.jb51.net/article/105325.htm DOS批处理中%cd%与%~dp0的区别详解     Windows下批处理中%cd%和%~dp0都能用来表示当前 ...

  4. DOS批处理中%cd%和%~dp0的异同分析

    在DOS的批处理中,有时候需要知道当前的路径.在DOS中,有两个环境变量可以跟当前路径有关,一个是%cd%, 一个是%~dp0. 这两个变量的用法和代表的内容是不同的. 1. %cd% 可以用在批处理 ...

  5. DOS批处理中%~dp0表示什么意思

    https://www.jianshu.com/p/5a1a882ead95 https://www.cnblogs.com/cnpirate/p/5282324.html https://www.c ...

  6. DOS批处理中%~dp0等扩充变量语法详解

    有时候我们看到别人使用%~dp0 ~是扩展的意思,相当于把一个相对路径转换绝对路径%0代指批处理文件自身%1表示批处理文件命令行接收到的第一个参数,%2表示第二个,以此类推%~d0 是指批处理所在的盘 ...

  7. DOS批处理中对含有特殊字符的文件名的处理方法

    从一些网站下载的文件,文件名带有广告,典型的就是网站的名称和域名,搞得文件名很长.在一些场景下,广告看得见,真正的文件名却被...了.在以前,我是遇到就手工去掉广告,但一是麻烦,二是效率低.反正经常下 ...

  8. 解决DOS批处理中一个困扰我几十个月的编码问题

    DOS批处理中的编码很有意思.&是命令连接符,先执行&左边的命令,再执行&右边的命令.|是管道操作,把左边的输出当作右边的输入.此外还有&&和||,当要表示这些 ...

  9. 转载:dos批处理中路径获取

    在DOS的批处理中,有时候需要知道当前的路径. 在DOS中,有两个环境变量可以跟当前路径有关,一个是%cd%, 一个是%~dp0.      这两个变量的用法和代表的内容是不同的.  1. %cd% ...

随机推荐

  1. 【转】oracle CONNECT BY PRIOR叶子节点查找根节点

    SELECT TRANS_ID FROM TRANS_INST WHERE connect_by_isleaf=1 START WITH TRANS_ID =480242 CONNECT BY PRI ...

  2. JavaScript 里面的整数 位 操作

    JavaScript 整数位操作. 与 操作符 & val num1 = 10; val num2 = 11; val num3 = num1 & num2; // num3 == 1 ...

  3. 【进阶修炼】——改善C#程序质量(10)

    158,不要写冗余注释. 注释应该写代码没有表达的东西. 代码能够自我描述就不要加注释. 159,废弃的注释应该尽早删除. 废弃的注释由于年代太久远,已经和现在的代码逻辑不匹配了,这样的注释只会误导人 ...

  4. Graph-DFS-图的深度优先遍历

    #include <iostream> using namespace std; /* 5 5 1 2 1 3 1 5 2 4 3 5 1 2 4 3 5 ---------------- ...

  5. JavaScript开源跨平台框架NativeScript

    NativeScript是一款使用JavaScript语言来构建跨平台原生移动应用的开源框架,支持iOS.Android和Windows Phone.且NativeScript的使用没有过多繁杂的要求 ...

  6. android批量插入数据效率对比

    对比在android中批量插入数据的3中方式对比(各插入1W条数据所花费的时间): 1. 一个一个插入 /** * 向表中插入数据 * * @param openHelper * @param app ...

  7. 【转】PyCharm LicenseServer 破解

    在自己的云平台上部署了IntelliJIDEALicenseServer服务,理论上http://www.jetbrains.com的产品都可以使用,不过目前只测试了PyCharm. 大家也知道,Py ...

  8. 一个完整的SAP RFC调用接口封装

    因为经常需要访问sap操作数据,就封装了一个类方便调用,运行条件需要安装sap客户端,在sap客户端安装之后会带有一个com接口,本接口就通过这个com访问sap,因为com的后期绑定问题故使用了vb ...

  9. VMware Ubuntu NAT 不能上网

    在VMware中配置NAT,控制面板->网络和Internet->网络连接,设置对应的VMware网卡为DHCP. ubuntu虚拟机中配置网卡为DHCP.获取不到ip. 参考链接: ht ...

  10. 在MySQL中创建cm-hive使用的数据库及账号

    放上来做一个备份,免得忘了密码,囧~ mysql> create database metastore default character set utf8; Query OK, row aff ...