我正在尝试查看特定文件夹是否作为某个路径中的子文件夹存在。
假设在变量中给出了一个路径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%