获取包含当前执行的批处理脚本的目录


30

%0在批处理文件中使用以获取该批处理文件的包含目录,但结果是:-

c:\folder1\folder2\batch.bat

我只想要目录,没有批处理文件名,像这样:-

c:\folder1\folder2\

我该怎么做?也许我应该过滤路径。如果是,我该怎么办?


当在批处理文件中使用%0作为命令行的一部分时,应使用%0 \ .. \ RestOfStuff。双点将其带回到文件名之后。
约翰·加迪尼尔

包含当前执行脚本的目录不必与当前工作目录(CD)相同!我相应地编辑了问题-现在避免使用“当前目录”一词。
chiccodoro 2014年

Answers:


52
%~p0

仅返回路径。

%~dp0

将返回驱动器+路径。

有关该主题的更多信息,请访问Microsoft网站

通过在Windows操作系统上执行,也可以在for命令的帮助中找到有关此语法的信息for /?


2
作为另一个参考资料,键入时也会显示相同的变量替换列表for /?
Kevin

%〜dp0给出正在执行的批处理文件的目录。如果批处理文件位于其他目录中,则将获得另一个目录。%CD%始终为您提供当前目录。
Mihai Danila

@MihaiDanila,不,那不是OP要求的。
Bart De Vos 2013年

实际上,我在寻找一种获取当前目录的方法时遇到了这个问题。这是Google的首个热门产品。标题显然是当前目录,尽管您对内容是正确的。我们都是对的,但我认为莱恩和我对问题的实质传达的观点是正确的,尽管它的意图是什么。这就是为什么我提高了lain的答案的原因。问题标题应重命名,以便与问题本身保持同步。
Mihai Danila

1
可能已经提供了链接中文章的标题,因为该链接不再有效.....
Rupsingh Mathwale 18'Apr

16

当前目录保存在%CD%中


4
%CD%从不在其中存在批处理文件的位置重新获得执行批处理的路径
Mohammad AL-Rawabdeh

4
@Mohammad:的确,这是当前目录。另一个是批处理文件所在的目录。这两个不一样,您的问题明确要求这一点。因此,如果这不是您的意思,请对其进行编辑。
Joey

%CD%返回批处理文件的当前路径,但是当我们以管理员身份执行批处理文件时失败。当我们以管理员身份运行批处理文件时,它将返回System32的路径。因此,更好的选择是使用%〜dp0表示完整路径

%〜dp0给出正在执行的批处理文件的目录。如果批处理文件位于其他目录中,则将获得另一个目录。%CD%始终为您提供当前目录。
Mihai Danila

供读者参考-该问题最初使用的是“当前目录”一词,而意味着包含脚本的目录-现在已解决。
chiccodoro 2014年

4

一些影响文件名的表达式:

~f0将给出完全限定的文件名。
~dpnx0的内容与相同~f0,但这表明您可以将其分解为以下部分:d = drive p = path n = name x = extension


0

使用chdir命令

选项1:

chdir 

选项2:

echo %CD%

同样在这里:这不是OP的意图-问题现在更加清楚了。
chiccodoro 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.