當包含在括號中的複合語句將被執行, 該語句被第一解析從左括號的全部 的方式到匹配的右括號。
在這個時候,任何%var%
由var
的值代替從 環境在當時被解析(即其分析時值。)
THEN如果聲明似乎有效,它被執行。
有訪問 變量的RUN-TIME值的三種常用的方法(作爲一個FOR
循環的執行方式,例如。)
1/SETLOCAL ENABLEDELAYEDEXPANSION
其切換到一個模式,其中 !變種!可用於訪問的var
2/CALL set var2=%%var%%
運行值與來自的var
運行值設置的var2
值/執行子程序,內部或外部的在其內%var%
將是運行時的值。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%i IN (1 2 3) DO (
ECHO START of run %%i
ECHO using ^!time^! : !time! - PARSE TIME was %time%
CALL ECHO using CALL %%%%TIME%%%% : %%TIME%%
CALL :report
timeout /t 5
ECHO using ^!time^! : !time!
CALL ECHO using CALL %%%%TIME%%%% : %%TIME%%
CALL :report
ECHO END of run %%i
ECHO.
)
GOTO :eof
:report
ECHO :report says TIME is %TIME%
GOTO :eof
有幾項要注意:
指令
IF ERRORLEVELñ回聲錯誤級別爲n或更大
ALWAYS解釋運行時值ERRORLEVEL
IF SET VAR
ALWAYS解釋的VAR
的magic variables
像ERRORLEVEL運行時間值和時間應永遠 設置。如果執行
SET ERRORLEVEL =啞
然後ERRORLEVEL
將採用價值dumb
因爲在當前環境下的 值在系統指定的值優先。
謝謝Endoro!簡單但非常有幫助。問題解決了 - 找到一些長度的文件: 'code' FOR/F %%的F( 'DIR/B * .PNG')做( \t電話:strlen的結果%%˚F \t SETLOCAL enabledelayedexpansion \t如果/我 「!導致!」 == 「6」 ... ... SOME_WORK \t ENDLOCAL ) 轉到:EOF :strlen的 SETLOCAL 組字符串=%〜2 組字符串=%字符串: 「=%^ &FOR/F 「delims =」 %%一個在( '設置字符串^ | FINDSTR/O $')做( 集合/ A ST r_len = %% a-9) (endlocal&set「%〜1 =%str_len%」 exit/b) 'code' –
meine
@meine - 無法在此評論中讀取您的代碼。把它放在pastebin或(更好)提出一個新問題。 – Endoro
這不是一個新問題,而只是整個腳本的一部分,您的答案對我有幫助。 :) – meine