[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 批处理%~dp0怎么回事啊?

关于%~dp0的,网上都是前篇一律,看不懂,汗!
有没有人愿意举个例子来说明一下,万分感谢!

  1. @echo off
  2. echo 我是一个批处理文件,我的所在的文件夹是:%~dp0
  3. pause
复制代码

TOP

~0               - 删除任何引号("),扩充 %0
  %~f0             - 将 %0 扩充到一个完全合格的路径名(“f”是file,即文件)
  %~d0            - 将 %0 扩充到一个驱动器号
  %~p0            - 将 %0 扩充到一个路径
  %~n0            - 将 %0 扩充到一个文件名(“n”是name 文件名)
  %~x0             - 将 %0 扩充到一个文件扩展名
  %~s0             - 扩充的路径只含有短名(“s”为Short,短的)
  %~a0             - 将 %0 扩充到文件的文件属性(“a”为attribute,即属性)
  %~t0              - 将 %0 扩充到文件的日期/时间(“t”time)
  %~z0              - 将 %0 扩充到文件的大小(Size 大小)
  %~$PATH:0   - 查找列在路径环境变量的目录,并将 %0 扩充到找到的第一个完全合格的名称。

                          如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串


那么这些又是说明意思?

TOP

3# 1130342432
那你就把那位兄弟代码里的%~dp0依次改呗,试试就知道了

TOP

多谢朋友提醒!
但这种命令到底有说明用?

TOP

要弄清楚这个问题先要了解几个概念性的东西:

d(Drive)指的是所在的盘符根目录,如D:

p(Path)指的是当前路径,如\test\temp

n(Name)指的是文件夹或文件的名字,如test

x(extensionname)指的是文件的后缀名,如.bat

%0指的是文件自身(批处理),相当于"%~dpnx0",实际上这个%0是参数,而批的参数有%0-%9共10个,除了%0外,其余的参数都是由别的语块(多见子程序)或脚本传递给本语块或脚本的,如Call a.bat bathome ArdentMan中bathome和ArdentMan就是传递的参数,分别为%1 %2

综上所述%~dp0就是表示将test.bat自身的绝对路径(D:\test\temp)传递给脚本进行调用。 
2

评分人数

一路飘过的鸟~~~

TOP

5# 1130342432
其实微软的说明俺也看的稀里糊涂,就按4楼提供的办法,自己测试自己领悟吧

TOP

把3楼自己的说明对照6楼看清,用2楼代码实验,基本能理解这个问题了
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

同时建议楼主看看这个帖子:

http://www.bathome.net/viewthrea ... hlight=%C0%A9%D5%B9
一路飘过的鸟~~~

TOP

  1. @echo off
  2. echo %~dp0     ##显示自身路径
  3. echo %*     ##显示拖曳进来的文件完全合格路径名
  4. echo %cd%   ##路径
  5. ::同%~p0
  6. echo %0   ##完全合格路径名,带双引号
  7. ::同%~f0
  8. echo %~n0   ##文件名
  9. echo %~d0   ##驱动器
  10. echo %~p0   ##路径
  11. echo %~f0   ##完全合格路径名
  12. echo %~x0   ##扩展名   
  13. echo %~s0   ##路径只含短名
  14. echo %~a0   ##文件属性
  15. echo %~t0   ##文件日期
  16. echo %~z0   ##文件大小
  17. echo %~t0   ##文件日期
  18. echo %~$PATH:0   
  19. ::%cd%    表示自身的路径
  20. ::%0      表示自身的完整路径(即批处理自身,包含驱动器、路径、文件名和后缀名)
  21. ::start "" %cd%
  22. pause
  23. @echo off&setlocal enabledelayedexpansion
  24. for /f "" %%a in (%0) do (
  25. set bsd=%%~da
  26. set bsdp=%%~dpa
  27. )
  28. echo !bsd!
  29. echo !bsdp!
  30. cd /d f:\
  31. dir *.*
  32. cd /d !bsdp!
  33. dir *.*
  34. pause
复制代码
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

学习中,谢谢分享!

TOP

返回列表