Windows 如何从基于自身的批处理脚本中查找第三个目录-%0

Windows 如何从基于自身的批处理脚本中查找第三个目录-%0,windows,batch-file,cmd,Windows,Batch File,Cmd,当从文件所在的同一目录调用该文件时,此操作有效: @ECHO OFF set _MyCurrentPath=%CD% pushd .. set _Level1UpDir=%CD% ECHO _Level1UpDir: %_Level1UpDir% pushd .. set _Level2UpDir=%CD% ECHO _Level2UpDir: %_Level2UpDir% pushd .. set _Level3U

当从文件所在的同一目录调用该文件时,此操作有效:

    @ECHO OFF
    set _MyCurrentPath=%CD%
    pushd ..
    set _Level1UpDir=%CD%
    ECHO _Level1UpDir: %_Level1UpDir%
    pushd ..
    set _Level2UpDir=%CD%
    ECHO _Level2UpDir: %_Level2UpDir%
    pushd ..
    set _Level3UpDir=%CD%
    ECHO _Level3UpDir: %_Level3UpDir%
    PAUSE
然而,如何从%0开始提高第n个级别。。。它需要一些花哨的通话,通话中有for/f%%

我的策略是按如下方式计算反斜杠的数量和a秒for循环: 设置计数=1 对于/f“tokens=1-4 delims=。”%%G IN('echo%0')DO(调用:子例程“%%G”) 后藤:eof

:subroutine
echo %count%:%1
set /a count+=1
pause
GOTO :eof

路径
\..\..\..
有什么问题(在循环中重复
您可以随意选择)

这是一批

如果需要完全扩展的路径,可以尝试。例如:
%~dp0
%0
扩展为完整路径

如果批处理文件包含与批处理文件本身相关的路径,我经常将
CD%~dp0
放在批处理文件顶部附近


因此,您可以使用
%~dp0\..\\..\
获得完整路径,然后从那里获得3个路径。

只是为了让复制粘贴更容易:这是我找到的最短解决方案,基于jwd的重播:

cd %~dp0
for /L %%i in (1,1,3) do pushd ..
set _MyDir3LevelsUp=%CD%

***这条路怎么了。\..\..\。。(重复..在循环中,尽可能多地重复)如果批处理文件不是从其当前目录调用,那么将其与
%~dp0
结合使用如何?绝对正确!!!感谢您的好答案+n次重复链接:)
            @echo off
            ::File:FileCounter.cmd how-to count from for loop in cmd


            SET count=1
            FOR /L %%G IN (1,1,3) DO (call :LabelGoUpOnce "%%G")
            echo Hit a key to continue

            echo Dir3LevelsUp %Dir3LevelsUp%

            pause >nul
            GOTO :eof
            :LabelGoUpOnce
            pushd ..
            echo CD IS %CD%
            set Dir3LevelsUp=%CD%
            echo %count%:%1

            set /a count+=1
            GOTO :eof