我当前正在创建一个批处理文件,该文件解压缩它将在指定文件夹中检测到的所有存档。现在我想使用此代码的指定文件夹内检测存档文件:批处理文件忽略FOR循环内的ELSE语句
@ECHO OFF
SETLOCAL
SETLOCAL EnableDelayedExpansion
SET quote="
SET cwdText=Current working directory:
SET cwd=%cd%
SET fullCWD=%cwdText%%cwd%
SET path=%~dp0
SET types=file_types.txt
SET fullPath=%path%%types%
ECHO %fullCWD%
ECHO %fullPath%
:SPECIFYPATH
ECHO:
SET /P directory=Specify the full path location of the archive files:
IF "%cd%"=="%directory%" (
ECHO Specified location is already the current directory
GOTO SPECIFYPATH
) ELSE (
PUSHD %directory%
CD
GOTO CHECKARCHIVES
)
:CHECKARCHIVES
FOR %%T IN (*.zip,*.rar,*.7z) DO (
IF EXIST %%T (
ECHO Archive files detected
GOTO EOF
) ELSE (
ECHO Archive files not detected
GOTO EOF
)
GOTO EOF
)
:EXTRACT
ECHO Extracting archive files
:EOF
PAUSE
其中,我开始检查归档文件的部分是在:CHECKARCHIVES
标签。我现在遇到的问题是每当我尝试指定一个没有存档文件的文件夹时,代码立即跳转到:EXTRACT
标签,并且不会转到FOR
语句中的ELSE
语句。有人可以解释为什么这样吗?
我也试过在第一个IF
声明后面使用IF NOT EXIST...
声明,但我仍然得到相同的行为。
我明白了。所以这意味着批处理文件环境中的'FOR'语句更像是一个'IF'语句的迭代版本,而不像我们通常在C++等编程语言中知道的那样? – Jairo
我不会说迭代'if';你可以认为它像'for each',遍历所有匹配的文件... – aschipfl
@Jairo,'for'只是[*“globs”*](https://en.wikipedia.org/wiki/Glob_% 28编程%29)指定组中的元素。 –