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