如何检查给定相对路径中文件夹是否存在?

如何检查给定相对路径中文件夹是否存在?

我正在尝试查看特定文件夹是否作为某个路径中的子文件夹存在。

假设在变量中给出了一个路径InputPath ,并给出了一个相对路径RelPath。如何编写一个块来查看给定文件夹名称(由变量给出FolderName)是否存在于该路径中?

在该路径中意味着如果我dir在路径中执行InputPath\RelPath,我想检查是否FolderName是列出的文件夹之一。

我知道dir /d只能列出目录,但我不知道如何搜索该列表。

通过批处理文件举例:

@echo off

SET INPUT_PATH="D:\SomeFolder\OtherFolder\RandomFolder\"
SET REL_PATH="..\FunnyFolder"
SET FOLDER_NAME="SearchMeFolder"

goto IsFolder

:IsFolder
SET CURR_PATH=%CD%
cd "%INPUT_PATH%\%REL_PATH%"
:: Need to fetch all sub folder and check for existence
:: If exist, set FOLDER_EXIST to True, else False

答案1

批处理文件编程很麻烦。我找不到任何一种完美的解决方案。但这种三管齐下的方法似乎有效:

SET CURR_PATH=%CD%

:: Assume/anticipate failure
set "FOLDER_EXIST=False"

cd /d "%INPUT_PATH%\%REL_PATH%" 2> nul  &&  (
    if exist  %FOLDER_NAME%\    set "FOLDER_EXIST=True"
    if exist "%FOLDER_NAME%\"   set "FOLDER_EXIST=True"
    cd %FOLDER_NAME% 2> nul &&  set "FOLDER_EXIST=True"
)
cd /d %CURR_PATH%
echo FOLDER_EXIST = %FOLDER_EXIST%.

请注意,这些if语句正在测试(候选)文件夹名称随后是 \。 例如,

    if exist C:\Windows\debug
    if exist C:\Windows\debug\

    if exist C:\Windows\notepad.exe

都应该成功,但是

    if exist C:\Windows\notepad.exe\

应该会失败,因为C:\Windows\notepad.exe它不是一个文件夹。


    if exist  %FOLDER_NAME%\    set "FOLDER_EXIST=True"

%FOLDER_NAME%如果包含空格并且未加引号将会失败;例如, set "FOLDER_NAME=Program Files"

    if exist "%FOLDER_NAME%\"   set "FOLDER_EXIST=True"

如果%FOLDER_NAME%包含空格,则会失败,并且引用;例如set FOLDER_NAME="Program Files"。并且

    cd %FOLDER_NAME% 2> nul &&  set "FOLDER_EXIST=True"

如果您没有权限cd进入,将会失败%FOLDER_NAME%

答案2

&&使用运算符或||如果存在/不存在的一行版本:

>nul 2>&1 pushd "%cd%\my_Folder" &&(popd & set "Bool=True")|| set "Bool=False"

set Bool & echo=%Bool%

相关内容