我當前正在創建一個批處理文件,該文件解壓縮它將在指定文件夾中檢測到的所有存檔。現在我想使用此代碼的指定文件夾內檢測存檔文件:批處理文件忽略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)指定組中的元素。 –