在批处理文件中获取两个父级别

时间:2016-12-08 21:09:39

标签: batch-file cmd

我在c:\ Temp \ A \ B \ C \ MyBatch.bat中有一个bat文件

c:\Temp
  |
  |---- A
        |
        |----B
        |    |
        |    |----C
        |
        |----D
             |
             |----E

当我运行bat文件时,我想从中获取路径" C:\ Temp \ A \ D \ E"变成一个变量。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

那会这样做:

set MYVAR=%~pd0..\..\D\E

%~pd0是当前运行脚本的目录。附加\..\..\D\E,你很高兴。

但是,它不是你所期待的美丽路径,因为它有父目录路径

具有完整路径分辨率的替代解决方案:

@echo off

set MYVAR=%~pd0..\..\D\E
pushd %MYVAR%
if %ERRORLEVEL%==1 goto end
set MYVAR=%CD%
popd
:end
echo %MYVAR%

(实际上将目录更改为新构建的路径,让系统解析它,并将变量设置为当前目录,然后弹回上一个目录)。

如果无法输入目录(没有权限/不存在),则会回退到包含\..\部分的丑陋路径。

答案 1 :(得分:2)

使用FOR命令真的很容易。

@echo off
for %%G in ("%~dp0\..\..") do set grandparent=%%~dpnxG\D\E
echo %grandparent%

答案 2 :(得分:0)

pushd ..\..\d\e && set thepath=%CD% && popd

这应该可以解决问题。