我正在尝试找到一个存在于当前目录之上的目录,批处理语法让我失明。例如,假设我在:
C:\ dev的\项目\ folder1中\的projectname \ batch.bat
我想在这里找到我的共享libs文件夹:
C:\ dev的\共享
然后我需要将其设置为可以重用的变量。我正在做以下事情,但我觉得我已经达到了将我的头贴在墙上不再值得的阶段:
@setlocal enableextensions enabledelayedexpansion
@echo off
set shareddir=%~dp0
:loop
set shareddir=!shareddir!..\
set sharedir2=!shareddir!shared\
if not exists (%sharedir2%) goto loop
ECHO shareddir found = %sharedir2%
提前致谢。
答案 0 :(得分:2)
我认为您的方法会将路径 relative 返回到批处理文件,如下所示:
c:\dev\projects\folder1\projectname\..\..\..\shared
请尝试使用此方法:
@setlocal enableextensions enabledelayedexpansion
@echo off
pushd "%~dp0"
:loop
cd ..
if not exist shared goto loop
set sharedDir=%cd%\shared
popd
ECHO shareddir found = %sharedDir%
答案 1 :(得分:0)
@setlocal enableextensions enabledelayedexpansion
@echo off
set shareddir=%~dp0
:loop
set shareddir=!shareddir!..\
set sharedir2=!shareddir!shared\
if not exist "!sharedir2!" goto loop
ECHO shareddir found = !sharedir2!
endlocal
在这种情况下,不需要延迟扩展,但无论如何......
检查存在使用IF EXIST
但不是if exists
(命令提示符不关心gramar :-))并使用引号而不是括号(对于带有空格的路径,它是必需的)。
答案 2 :(得分:0)
另一种方法。如果找不到共享文件夹,我已经添加了一个额外的测试来防止无限循环。
@echo off
setlocal
set "sharedDir=%~dp0"
:loop
for %%F in ("%sharedDir%\..") do if not exist "%%~fF\shared" (
if %sharedDir% neq %%~fF (
set "sharedDir=%%~fF"
goto :loop
) else set "sharedDir="
) else set "sharedDir=%%~fF\shared"
:: Display the value. It will be undefined if shared folder not found.
set sharedDir