查找.bat文件的文件夹名称

时间:2012-06-07 12:22:12

标签: windows batch-file

我需要找到我正在执行的批处理文件的文件夹名称。所有其他方法为我提供了完整的路径。 我只需要父文件夹名称。此外,其他mentioned方法使用循环,这对我的需求来说非常冗长和冗长。 是否有任何方法可以直接通过%参数(或它们的组合)找到父文件夹名称?

3 个答案:

答案 0 :(得分:2)

您问题的直接答案是"否"。没有使用FOR循环或CALL,没有直接使用扩展修饰符的方法。

你问题中引用的帖子几乎拥有你需要的一切。

以下是两种与已发布的非常类似的优化技术。 Method1应该是最快的:

编辑 - 我通过删除子字符串操作进一步优化。
Edit2 - 我用简单的FOR代替FOR / F

@echo off
setlocal

::method 1 using FOR
for %%F in ("%~p0\.") do set "method1=%%~nxF"
if not defined method1 set method1=\

::method 2 using CALL
call :getName "%~p0\." method2

::print results
set method
exit /b

:getName  PathWithTrailing\.  ReturnVar
set "%~2=%~nx1"
if not defined %~2 set %~2=\
exit /b

答案 1 :(得分:1)

尝试

echo %~dp0 
在你的bat文件中

。 %0是批处理文件的名称。 ~dp为您提供指定参数的驱动器和路径。

答案 2 :(得分:1)

真的没有一种简单的方法可以做到这一点。我知道你提到你不想要一个冗长的循环方法,所以这是一个简短的循环方法:

for %%D in (.) do @echo %%~nD

请注意,此代码仅适用于批处理文件。在它之外,你应该使用%而不是%%。

你应该看看Rob van der Woude's scripting pages。他在他的网站上有很多关于DOS脚本的好信息。