浅谈批处理中的%cd%与%~dp0

本文详细解释了批处理脚本中%cd%与%~dp0两个变量的区别,并通过实例演示了它们在不同场景下的表现。%cd%表示执行文件的当前目录,而%~dp0则始终指向bat文件所在目录。

这两个变量都是用来表示当前目录,可使用时却大不相同,记录下

%cd%代表的是执行文件的当前目录,强调bat是在哪里启动的;->盘符展开后是可改变的

%~dp0代表的是bat文件所在的文件目录,强调bat的文件位置     ->盘符展开后是不可改变的

 

我们举个例子来说明会更直观些

我在桌面新建一个文件夹,里面创建一份bbb.bat文件,文件内容为

@echo off

echo cd = %cd%
echo dp0 = %~dp0

pause

exit
echo

然后在桌面创建一份aaa.bat文件,文件内容为

start "" "%cd%\新建文件夹\bbb.bat"

 

好,文件创建完毕,我们来看执行情况,分两种情况执行:

1、直接双击运行bbb.bat,我们看到

此时的cd与dp0指向是一样的,因为在新建文件夹启动,所以启动路径与文件所在目录一样

 

2、双击桌面的aaa.bat,我们看到

因为我们是通过在桌面的aaa.bat文件启动,所以此时的启动路径就指向了桌面,dp0还是与第一种情况一样

 

通过这两种情况,我们可以很明显看到cd可以不一样(取决于在哪里启动),但dp0都是一样的(不可改变)

 

 

若想知道%~dp0具体是什么意思,可参考:http://blog.youkuaiyun.com/lightyearwp/article/details/2778677

### 批处理命令 `cd %~dp0` 的作用使用场景 #### 1. 命令的作用 `cd %~dp0` 是 Windows 批处理脚本中常用的一条命令,其主要作用是将当前的工作目录切换到批处理文件所在的目录。具体来说: - `%~dp0` 是一个变量扩展语法,表示批处理文件所在的盘符和路径[^1]。 - `cd` 是 Change Directory 的缩写,用于更改当前工作目录。 - 当执行 `cd %~dp0` 时,系统会将当前工作目录切换到批处理文件所在的完整路径,无论批处理文件是从哪个目录启动的。 #### 2. 使用场景 以下是 `cd %~dp0` 的典型使用场景: - **确保脚本运行在正确的目录下** 在某些情况下,批处理脚本需要依赖于其所在目录中的文件或子目录。通过 `cd %~dp0`,可以确保脚本运行时的工作目录始终是批处理文件所在的目录,而不是启动脚本时的当前目录[^3]。 - **避免路径冲突** 如果脚本中涉及相对路径的操作(如读取文件、调用其他脚本等),使用 `cd %~dp0` 可以避免因当前工作目录不同而导致的路径错误。 - **跨盘符操作** 如果批处理文件位于不同的磁盘分区,`cd %~dp0` 不仅会切换到正确的目录,还会自动切换到对应的盘符[^1]。 #### 3. 示例代码 以下是一个简单的示例,展示 `cd %~dp0` 的用法: ```batch @echo off echo 当前工作目录: %cd% echo 批处理文件所在目录: %~dp0 :: 切换到批处理文件所在目录 cd %~dp0 echo 现在的工作目录: %cd% :: 暂停以便查看结果 pause ``` #### 4. 注意事项 - **路径格式问题** `%~dp0` 返回的路径末尾通常带有一个反斜杠 `\`,因此在拼接路径时需要注意不要重复添加反斜杠[^2]。 - **兼容性问题** `%~dp0` 是 Windows 批处理特有的语法,不适用于其他操作系统或脚本语言。 - **当前工作目录批处理文件目录的区别** `%cd%` 表示的是当前工作目录,而 `%~dp0` 表示的是批处理文件所在的目录。两者的值可能不同,尤其是在从其他目录启动批处理文件时[^3]。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值