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

我发现%~dp0非常有用,我使用它来使我的批处理文件更加便携。

但标签本身似乎很神秘,我...什么是~做什么? dp是指驱动器和路径吗? 0是指%0 ,包含文件名的批处理文件的路径?

或者它只是一个奇怪的标签?

我也想知道它是否是一个记录的功能,或者是容易被弃用的东西。


调用

for /?

在命令行中给出了关于这个语法的帮助(可以在FOR之外使用,这只是可以找到帮助的地方)。

另外,FOR变量引用的替换已被增强。 您现在可以使用以下可选语法:

%~I         - expands %I removing any surrounding quotes (")
%~fI        - expands %I to a fully qualified path name
%~dI        - expands %I to a drive letter only
%~pI        - expands %I to a path only
%~nI        - expands %I to a file name only
%~xI        - expands %I to a file extension only
%~sI        - expanded path contains short names only
%~aI        - expands %I to file attributes of file
%~tI        - expands %I to date/time of file
%~zI        - expands %I to size of file
%~$PATH:I   - searches the directories listed in the PATH
               environment variable and expands %I to the
               fully qualified name of the first one found.
               If the environment variable name is not
               defined or the file is not found by the
               search, then this modifier expands to the
               empty string

修饰符可以组合得到复合结果:

%~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

在上面的例子中,%I和PATH可以被其他有效值替代。 %〜语法由一个有效的FOR变量名称结束。 采用大写字母变量名称(如%I)使其更具可读性,并避免与大小写不敏感的修饰符混淆。

您可以使用不同的字母,如f用于“完整路径名称”, d表示驱动器号, p表示路径,可以组合使用。 %~是每个序列的开始,数字I表示它对参数%I起作用(其中%0是批处理文件的完整名称,就像您假设的那样)。


(首先,我想推荐这个有用的批处理参考站点:http://ss64.com/nt/)

然后,另一个有用的解释:http://htipe.wordpress.com/2008/10/09/the-dp0-variable/

%〜dp0变量

该%〜DP0当Windows批处理文件中引用将扩大到该批处理文件的d里沃信和P ATH(这是一个零)变量。

变量%0-%9是指批处理文件的命令行参数。 %1-%9参考批处理文件名后面的命令行参数。 %0指的是批处理文件本身。

如果您使用波形符号(〜)跟随百分号字符(%),则可以在参数编号之前插入一个修饰符以更改变量的扩展方式。 d修饰符展开为盘符,p修饰符展开为参数的路径。

示例:假设您在C:上有一个名为bat_files的目录,并且该目录中有一个名为example.bat的文件。 在这种情况下,%〜dp0(组合d和p修饰符)将扩展到C: bat_files。

查看此Microsoft文章以获取完整说明。

另外,看看这个论坛主题。

并从这里得到一个更明确的参考:

  • %CmdCmdLine%将返回传递给CMD.EXE的整个命令行

  • %*将返回从第一个命令行参数开始的命令行的其余部分(在Windows NT 4中,%*还包括所有前导空格)

  • 如果%n是一个有效的路径或文件名(无UNC),% %~dn将返回%n的驱动器号(n的范围可以从0到9)

  • %~pn将返回%n的目录,如果%n是有效的路径或文件名(无UNC)

  • 如果%n是有效的文件名,% %~nn将只返回%n的文件名

  • 如果%n是有效的文件名,% %~xn将仅返回%n的文件扩展名

  • 如果%n是有效的文件名或目录,% %~fn将返回%n的完全限定路径


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

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

    链接地址: http://www.djcxy.com/p/20233.html

    上一篇: What does %~dp0 mean, and how does it work?

    下一篇: Which comment style should I use in batch files?