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 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%的区别的更多相关文章
- DOS批处理中%cd%和%~dp0的区别
DOS批处理中%cd%和%~dp0的区别 在DOS的批处理中,有时候需要知道当前的路径. 在DOS中,有两个环境变量可以跟当前路径有关,一个是%cd%, 一个是%~dp0. 这两个变量 ...
- DOS批处理中%cd%和%~dp0的区别[forward]
DOS批处理中%cd%和%~dp0的区别 在DOS的批处理中,有时候需要知道当前的路径. 在DOS中,有两个环境变量可以跟当前路径有关,一个是%cd%, 一个是%~dp0. 这两个变量的 ...
- DOS批处理中%cd%与%~dp0的区别详解
转载:https://www.jb51.net/article/105325.htm DOS批处理中%cd%与%~dp0的区别详解 Windows下批处理中%cd%和%~dp0都能用来表示当前 ...
- DOS批处理中%cd%和%~dp0的异同分析
在DOS的批处理中,有时候需要知道当前的路径.在DOS中,有两个环境变量可以跟当前路径有关,一个是%cd%, 一个是%~dp0. 这两个变量的用法和代表的内容是不同的. 1. %cd% 可以用在批处理 ...
- DOS批处理中%~dp0表示什么意思
https://www.jianshu.com/p/5a1a882ead95 https://www.cnblogs.com/cnpirate/p/5282324.html https://www.c ...
- DOS批处理中%~dp0等扩充变量语法详解
有时候我们看到别人使用%~dp0 ~是扩展的意思,相当于把一个相对路径转换绝对路径%0代指批处理文件自身%1表示批处理文件命令行接收到的第一个参数,%2表示第二个,以此类推%~d0 是指批处理所在的盘 ...
- DOS批处理中对含有特殊字符的文件名的处理方法
从一些网站下载的文件,文件名带有广告,典型的就是网站的名称和域名,搞得文件名很长.在一些场景下,广告看得见,真正的文件名却被...了.在以前,我是遇到就手工去掉广告,但一是麻烦,二是效率低.反正经常下 ...
- 解决DOS批处理中一个困扰我几十个月的编码问题
DOS批处理中的编码很有意思.&是命令连接符,先执行&左边的命令,再执行&右边的命令.|是管道操作,把左边的输出当作右边的输入.此外还有&&和||,当要表示这些 ...
- 转载:dos批处理中路径获取
在DOS的批处理中,有时候需要知道当前的路径. 在DOS中,有两个环境变量可以跟当前路径有关,一个是%cd%, 一个是%~dp0. 这两个变量的用法和代表的内容是不同的. 1. %cd% ...
随机推荐
- Fat-jar 打包,并使用 proguard 混淆代码
. . . . . Build Fat Jar 的时候在 Clas-Path 中填入需要引用的第三方 jar 包,如下图: 点击下一步,只勾选自己的项目,其它第三方包都不要勾选,否则混淆会出现问题. ...
- CentOS7安装MySQL5.7常见问题
下载与安装 亲测有效: https://www.linuxidc.com/Linux/2016-09/135288.htm 设置MySQL服务开机自启动 注意,CentOS6和7有一点不同:CentO ...
- Linux用户及用户组管理命令
一,组操作 1.创建组 groupadd test 增加一个test组 2.修改组 groupmod -n test2 test 将test组的名子改成test2 3.删除组 groupdel ...
- MySQL 5.6 GTID 原理以及使用
转自:http://hamilton.duapp.com/detail?articleId=47 简介 GTID是MySQL 5.6的新特性,其全称是Global Transaction Identi ...
- 【常用配置】——WPS文字常用快捷键大全【史上最全面】转
WPS文字快捷键大全 Word快捷键 Excel快捷键 PPT快捷键 Office快捷键大全 WPS文字快捷键 WPS表格快捷键 WPS演示快捷键 WPS快捷键大全 用于处理WPS文档的快捷键 创建新 ...
- Keil C 中全局变量 extern 的使用
在KEIL C中,有多个源文件使用到全局变量时,可以在一个源文件中定义全局变量,在另外的源文件中用extern 声明该变量,说明该变量定义在别的文件中,将其作用域扩展到此文件. 例如:有以下两个源文件 ...
- beansbinding NetBeans IDE 中 Swing数据绑定插件
http://my.oschina.net/u/127459/blog/111486 https://kenai.com/projects/betterbeansbinding/pages/Home ...
- 微信小程序——收起和查看更多功能
项目中做一些列表的时候,可能会需要做到 查看更多 及 收起功能,如下图所示: 大概的需求就是默认只显示2条,点击[查看更多]显示全部,点击[收起]还原. 实现的方法千万种.我来讲一下我的实现思路: 1 ...
- C++ 定时器任务类实现
#ifndef __TIMERTASK_H_ #define __TIMERTASK_H_ /* 定时器任务基类 */ #include "asr_taskinterface.h" ...
- 关于使用QTcpSocket的一些总结
QTcpSocket类的方法connectToHost会泄露内存,即使把调用这个方法的QTcpSocket实例delete掉,内存也不会释放!反复connectToHost会导致段错误,十分危险.必须 ...