batch-file bat教程 - %〜dp0是什么意思,它是如何工作的?




windows example (7)

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

但是这个标签本身对我来说似乎很神秘......这是怎么回事? dp是指驱动器和路径吗? 0是指%0 ,包含文件名的批处理文件的路径?

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

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


Answers

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

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


%〜dp0展开为正在运行的批处理文件的当前目录路径。

为了清楚理解,让我们在目录中创建一个批处理文件。

C:\脚本\ test.bat的

内容:

@echo off
echo %~dp0

当你从命令行运行它时,你会看到这个结果:

C:\脚本\


一个例子会很好 - 这是一个微不足道的例子

for %I in (*.*) do @echo %~xI

它仅列出当前文件夹中每个文件的扩展名

对于更多有用的变量组合(也在前面的响应中列出),从CMD提示符执行: HELP FOR其中包含此代码段

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

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

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

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

%〜dp0变量

在Windows批处理文件中引用的%〜dp0(即零)变量将扩展到该批处理文件的文本和文件。

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

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

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

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

另外,看看这个论坛主题

并从here更清楚的参考:

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

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

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

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

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

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

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


草莓Perl的便携式外壳启动器的一个很好的例子:

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是什么,但它是一种享受!


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

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

希望这可以帮助某人。


你可以使用pushd / popd命令(帮助pushd /?

Prog1.exe
Pushd D:\SomeDir
Prog2.exe
popd
Prog3.exe




batch-file cmd