setlocal enabledelayedexpansion
IF EXIST "flava.jpg" (
REM Get current filesize
FOR /F %%A in ("flava.jpg") DO SET _existingFileSize=%%~zA
ECHO !_existingFileSize!
) ELSE (
ECHO File not found.
)
或
IF EXIST "flava.jpg" (
REM Get current filesize
FOR /F %%A in ("flava.jpg") DO SET _existingFileSize=%%~zA
CALL ECHO %%_existingFileSize%%
) ELSE (
ECHO File not found.
)
或
set "_existingfilesize="
FOR /F %%A in ("flava.jpg") DO SET _existingFileSize=%%~zA
if defined _existingfilesize (echo %_existingfilesize%) else (echo file not found)
的問題是,一個塊語句(a parenthesised series of statements)
,內整個塊進行解析,並然後執行。該塊內的任何%var%
將在該塊被解析時由該變量的值取代 - 在塊執行之前 - 同樣的事情適用於FOR ... DO (block)
。
因此,在遇到IF
時,將使用%variables%
的值執行IF (something) else (somethingelse)
。克服這個
兩種常用方法是:1)使用setlocal enabledelayedexpansion
並使用!var!
代替%var%
訪問的var
改變的值或2),以調用一個子程序使用改變的值來執行進一步的處理。
因此請注意使用CALL ECHO %%var%%
,它顯示var
的更改值。 CALL ECHO %%errorlevel%%
顯示,但遺憾的是,然後RESETS錯誤級別。
請在上下文中顯示代碼。我相信你可能在'代碼塊'(一個括號內的一系列語句)中有'for'和後面的'echo' - 請編輯你的問題以包含整個代碼塊(從初始化的'for'或' if'to finl closing')' – Magoo
@Magoo我已經放棄了仍然複製我遇到的問題的最小代碼,而不是壓倒一切。 (在我的機器上測試過,仍然有相同的問題。) –