DOS 命令学习 Windows脚本 - %~dp0的含义 DOS批处理中%cd%和%~dp0的异同

更改当前目录为批处理本身的目录
有些晕吧?不急,我举例
比如你有个批处理a.bat在D:\QQ文件夹下
a.bat内容为
cd /d %~dp0
在这里
cd /d %~dp0的意思就是cd /d d:\qq
%0代表批处理本身 d:\qq\a.bat
~dp是变量扩充
d既是扩充到分区号 d:
p就是扩充到路径 \qq
dp就是扩充到分区号路径 d:\qq

扩充变量语法详解:

:: 选项语法:
:: ~I - 删除任何引号("),扩充 %I
:: %~fI - 将 %I 扩充到一个完全合格的路径名
:: %~dI - 仅将 %I 扩充到一个驱动器号
:: %~pI - 仅将 %I 扩充到一个路径
:: %~nI - 仅将 %I 扩充到一个文件名
:: %~xI - 仅将 %I 扩充到一个文件扩展名
:: %~sI - 扩充的路径只含有短名
:: %~aI - 将 %I 扩充到文件的文件属性
:: %~tI - 将 %I 扩充到文件的日期/时间
:: %~zI - 将 %I 扩充到文件的大小
:: %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充
:: 到找到的第一个完全合格的名称。如果环境变量名
:: 未被定义,或者没有找到文件,此组合键会扩充到
:: 空字符串
:: 可以组合修饰符来得到多重结果:
:: %~dpI - 仅将 %I 扩充到一个驱动器号和路径
:: %~nxI - 仅将 %I 扩充到一个文件名和扩展名
:: %~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
:: %~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
:: 到找到的第一个驱动器号和路径。
:: %~ftzaI - 将 %I 扩充到类似输出线路的 DIR

----------------------------

 

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

 

这两个变量的用法和代表的内容一般是不同的。

 

1. %cd% 可以用在批处理文件中,也可以用在命令行中;展开后,是驱动器盘符:+当前目录,如:

 

在 c:\dir 下,

 

Bat代码 复制代码

  1. echo %cd%

echo %cd%

 

显示为,

 

Bat代码 复制代码

  1. c:\dir

c:\dir

 

%cd%的时间内容是可以被改变的,比如CD命令就可以改变它的内容。

 

2. %~dp0    只可以用在批处理文件中,它是由它所在的批处理文件的目录位置决定的,是批处理文件所在的盘符:+路径。在执行这个批处理文件的过程中,它展开后的内容是不可以改变的。

 

 

比如在D盘下有个批处理文件,dirshow.bat:

 

Bat代码 复制代码

  1. @echo off
  2. echo this is %%cd%%  %cd%
  3. echo this is %%~dp0 %~dp0

@echo offecho this is %%cd%% %cd%echo this is %%~dp0 %~dp0

 

在C:\ 下执行它,输出为:

 

Bat代码 复制代码

  1. C:\>D:\dirshow.bat
  2. this is %cd%  C:\
  3. this is %~dp0 D:\

求取bat文件运行目录并将路径写入注册表的代码

比如Bat文件运行目录是E:\Tencent\QQ\,

则自动写入bat文件内制定的注册表项键值。

我自己组织的代码不知道对不对:

 

 

制作升级包:用WinRAR自解压读取注册表中的信息来作为自解压路径

在注册表中有软件的安装路径,现做了个软件的升级包,用WinRAR做的,想在自解压的时候让WinRAR自动到注册表中找到软件安装路径,作为自己的自解压路径.

以下方法可实现:

比如安装的程序Test,已安装到Program Files\Test下面,对应注册表项hklm\software\test下的install值

对Test的升级程序进行打Winrar自解压包,添加自解压脚本setup.bat

BatchFile code
@echo offfor /f "tokens=2,*" %%i in ('reg query hklm\software\test /v install') do set apppath="%%j\"copy a.exe %apppath% /ycopy b.exe %apppath% /yecho okpause>nul
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。