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