%〜dp0 是什么意思,它是如何工作的?

我发现%~dp0非常有用,并且我%~dp0使用它来使批处理文件更具可移植性。

但是标签本身对我来说似乎很神秘…… ~在做什么? dp是驱动器和路径吗? 0是否表示%0 ,即包含文件名的批处理文件的路径?

还是只是一个怪异的标签?

我还想知道它是否是一个已记录的功能,或易于弃用的功能。

答案

for /?
@echo off
@echo ~dp0= %~dp0
@echo ~dp1= %~dp1
@echo ~dp2= %~dp2
@echo on
D:\Workbench>batch arg1 arg2

~dp0= D:\Workbench\
~dp1= D:\Workbench\
~dp2= D:\Workbench\
D:\Workbench>batch c:\123\a.exe e:\abc\b.exe

~dp0= D:\Workbench\
~dp1= c:\123\
~dp2= e:\abc\

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true

批处理脚本中的变量%0设置为正在执行的批处理文件的名称。 %0之间的~dp特殊语法基本上表示要扩展变量%0以显示驱动器号和路径,从而为您提供包含批处理文件的当前目录!

@echo off
echo %~dp0

另一个有用的技巧是将当前目录设置为其他驱动器 ,必须先使用%~d0 cd %~dp0 ,然后再使用cd %~dp0 。这会将目录更改为批处理文件的驱动器,然后更改为其文件夹。

另外,对于 #oneLinerLovers,正如 @Omni 在注释中指出的, cd /d %~dp0将同时更改驱动器和目录:)

希望这对某人有帮助。

set drive=%~dp0
set drivep=%drive%
if #%drive:~-1%# == #\# set drivep=%drive:~0,-1%

set PATH=%drivep%\perl\site\bin;%drivep%\perl\bin;%drivep%\c\bin;%PATH%

不确定负 1 自己在做什么,但是可以有效!

for %I in (*.*) do @echo %~xI
%~dpI       - expands %I to a drive letter and path only
%~nxI       - expands %I to a file name and extension only
%~fsI       - expands %I to a full path name with short names only
%~dp$PATH:I - searches the directories listed in the PATH
               environment variable for %I and expands to the
               drive letter and path of the first one found.
%~ftzaI     - expands %I to a DIR like output line