2

我试图找到一个存在于当前目录之上的目录,而批处理语法让我失明。例如,假设我在:

c:\dev\projects\folder1\projectname\batch.bat

我想找到我的共享库文件夹,它位于此处:

c:\开发\共享

然后我需要将其设置为我可以重用的变量。我正在执行以下操作,但我觉得我已经到了将头靠在墙上不再值得的阶段:

@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%

提前致谢。

4

3 回答 3

3

我认为您的方法返回对于批处理文件的路径,如下所示:

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%
于 2013-05-27T23:49:33.583 回答
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 (命令提示符不关心语法:-))并使用引号而不是括号(带有空格的路径需要它)。

于 2013-05-27T23:02:14.870 回答
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
于 2013-05-28T00:10:57.293 回答