从批处理脚本中获取父目录的父目录

5

我有一个位于:C:\A\B\test.bat的脚本。

在脚本中,我通过命令获取脚本的父目录:parent_dir=~dp0 => 我得到了:C:\A\B

那么如何获取父级目录的父级目录:C:\A并将其设置为一个变量?

4个回答

7
FOR %%a IN ("%parent:~0,-1%") DO SET grandparent=%%~dpa

回应评论的完整代码

@ECHO OFF
setlocal
SET parent=%~dp0
ECHO parent=%parent%
FOR %%a IN ("%parent:~0,-1%") DO SET grandparent=%%~dpa
ECHO grandparent=%grandparent%

2

尝试一下这个:

for %%B in (%~dp0\.) do set c=%%~dpB

这只获取父目录,而不是父级的父级目录。 - UnhandledExcepSean
容易修复:for %%B in (%~dp0\..) do set c=%%~dpB - 除此之外,这是最好的答案。而且它正确回答了问题(从问题的示例来看,他们想要父级,而不是祖父级(只是措辞不当))。 - Stephan

1

当应用Alireza的答案时,这个可以工作。

@echo off

SET CurrentDirectory=%~dp0
echo %CurrentDirectory%
for %%B in (%CurrentDirectory%.) do set parent=%%~dpB
echo %parent%
for %%B in (%parent%.) do set grandparent=%%~dpB
echo %grandparent%

pause

0
echo thanks
@echo off
SET CurrentDirectory=%~dp0
echo %CurrentDirectory%
for %%B in (%CurrentDirectory%.) do set parent=%%~dpB
echo %parent%
for %%B in (%parent%.) do set grandparent=%%~dpB
echo %grandparent%
start "" msiexec /a %parent%AcroPro.msi

感谢您为Stack Overflow社区做出的贡献。这可能是一个正确的答案,但如果您能提供代码的额外解释,让开发人员能够理解您的推理过程,那将非常有用。对于不太熟悉语法或难以理解概念的新开发人员来说,这尤其有帮助。您是否可以编辑您的答案,包含更多细节,以造福整个社区? - Jeremy Caney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接