当包含在括号中的复合语句将被执行, 该语句被第一解析从左括号的全部 的方式到匹配的右括号。
在这个时候,任何%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