我正在尝试搜索当前目录路径并找到与该路径相邻的某个文件或目录。例如:如果脚本的当前目录是 C:\ Temp \ Dir1 \ Dir2 \ Dir3 \ Dir4 \ Dir5 \ Dir6 \ Test.bat ,并且“jars”是位于<的目录strong> 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
答案 0 :(得分:0)
这个想法大致如下:
获取批处理脚本的路径作为当前工作目录。
连接子目录名称。
如果结果路径存在,请返回路径并退出。
如果当前工作目录基本上是根目录,请返回Not found
并退出。
获取当前工作目录的父目录,并从步骤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%"