1

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

4

3 回答 3

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
于 2012-06-07T12:56:56.030 回答
1

尝试

echo %~dp0 

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

于 2012-06-07T12:28:20.297 回答
1

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

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

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

您应该查看Rob van der Woude 的脚本页面。他在他的网站上有很多关于 DOS 脚本的好信息。

于 2012-06-07T12:43:35.897 回答