让代码更简单

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

重要:本文最后更新于2019-03-19 13:10:27,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

DOS批处理命令在所有Windows电脑上都有(也叫CMD命令提示符),但使用过它的人不超过5%,知道怎么编写dos脚本的人又只有1%。那么剩下的1%你们知道DOS批处理命令中%~d0 、%~p0、%~dp0是什么意思吗?在很多逻辑比较多的批处理文件中,大量应用了这些扩充变量的代码,下面我们一起来学习下。

DOS批处理脚本命令

DOS批处理脚本命令

~是扩展的意思,相当于把一个相对路径转换绝对路径
%0代指批处理文件自身
%1表示批处理文件命令行接收到的第一个参数,%2表示第二个,以此类推
%~d0 是指批处理所在的盘符,其中d代表drive
%~p0 是指批处理所在的目录,其中p代表path
%~dp0 是批处理所在的盘符加路径

复制
cd %~dp0

就是进入批处理所在目录了

详细解释还可参考命令

复制
call /?

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

(注: %0 就是该 batch 文件的文件名)
这句的意思是 :更改当前目录为批处理本身的目录 。比如你有个批处理 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

下面是实例解析:

如果一个install.bat文件位于D:\jeesite\bin
文件内容如下:

复制
@echo off
echo [INFO] This is a demo.
echo [INFO] %~dp0
pause

运行install.bat,命令行输出如下

[INFO] This is a demo.
[INFO] D:\jeesite\bin\

即:
%0代表文件本身
d代表盘符
p代表路径
扩展的选项还包括:

%~f0 – 完整的路径+文件名

[INFO] D:\jeesite\bin\install.bat

%~n0 – 文件名(无扩展名)

[INFO] install

%~x0 – 文件扩展名

[INFO] .bat

  • %~s0 – 扩充的路径只含有短名(“s”为Short,短的)
  • %~a0 – 将 %0 扩充到文件的文件属性(“a”为attribute,即属性)
  • %~t0 – 将 %0 扩充到文件的日期/时间(“t”time)
  • %~z0 – 将 %0 扩充到文件的大小(Size 大小)

感觉很棒!可以赞赏支持我哟~

6 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐