Batch-File для поиска текущего абсолютного пути, чтобы найти файл или каталог? - PullRequest
0 голосов
/ 27 сентября 2011

Я пытаюсь найти текущий путь к каталогу и найти определенный файл или каталог, который находится рядом с этим путем. Например: если текущим каталогом скрипта является C: \ Temp \ Dir1 \ Dir2 \ Dir3 \ Dir4 \ Dir5 \ Dir6 \ Test.bat , и если "jars" - это каталог, расположенный в C: \ Temp \ jars , затем найдите вверх, чтобы найти каталог, в котором находится «jars».

Вот как я это реализовал, но мне интересно, есть ли более простой / короткий способ сделать это?

@echo off
SET TITLE=%~nx0
SET SEARCHFOR=jars\Site.jar
SET MYDIR=%~p0
SET MYDRIVE=%~d0
SET DIRCHAIN=%MYDIR:\= %
:: searches first 4 levels of depth but can be increased if necessary
ECHO Searching in directory chain: %MYDRIVE% %DIRCHAIN%
FOR /F "tokens=1-4 delims= " %%G IN ("%DIRCHAIN%") DO (
  if exist %MYDRIVE%\%SEARCHFOR% (
    SET APPHOME=%MYDRIVE%
    GOTO APPHOMESET
  )
  if exist %MYDRIVE%\%%G\%SEARCHFOR% (
    SET APPHOME=%MYDRIVE%\%%G
    GOTO APPHOMESET
  )
  if exist %MYDRIVE%\%%G\%%H\%SEARCHFOR% (
    SET APPHOME=%MYDRIVE%\%%G\%%H\
    GOTO APPHOMESET
  )
  if exist %MYDRIVE%\%%G\%%H\%%I\%SEARCHFOR% (
    SET APPHOME=%MYDRIVE%\%%G\%%H\%%I
    GOTO APPHOMESET
  )
  if exist %MYDRIVE%\%%G\%%H\%%I\%%J\%SEARCHFOR% (
    SET APPHOME=%MYDRIVE%\%%G\%%H\%%I\%%J
    GOTO APPHOMESET
  )
  GOTO FAILED
)
:FAILED
ECHO Did not discover location of APPHOME containing %SEARCHFOR%
ECHO Searched no deeper than %MYDRIVE%\%%G\%%H\%%I\%%J
:APPHOMESET
SET JREHOME=%APPHOME%\Javasoft\jre
echo APPHOME is %APPHOME%
echo JREHOME is %JREHOME%
pause

1 Ответ

0 голосов
/ 30 сентября 2011

Идея примерно такая:

  1. Получить путь к пакетному сценарию в качестве текущего рабочего каталога.

  2. Объединить подкаталогname.

  3. Если результирующий путь существует, вернуть путь и выйти.

  4. Если текущий рабочий каталог по сути является корневым каталогом, вернутьNot found и выход.

  5. Получить родительский каталог текущего рабочего каталога и повторить с шага # 2.

Здесь идет:

@ECHO OFF

SET "subdir=%~1"
SET "dir=%~f0"

:loop
  CALL :getdir "%dir%"

  IF EXIST "%dir%\%subdir%\" (
    ECHO %dir%\%subdir%
    GOTO :EOF
  )

  IF "%dir:~-1%" == ":" (
    ECHO Directory "%subdir%" not found.
    GOTO :EOF
  )
GOTO loop

:getdir
SET "dir=%~dp1"
SET "dir=%dir:~0,-1%"
...