本帖最后由 Hello123World 于 2011-8-20 14:38 编辑
诚如3楼所言,开启变量延迟即可。- @echo off
- set VAR=before
- if "%VAR%" == "before" (
- set VAR=after
- if "%VAR%" == "after" @echo If you see this, it worked
- )
- pause
复制代码 之所以不会显示“If you see this, it worked”,是因为- if "%VAR%" == "before" (
- set VAR=after
- if "%VAR%" == "after" @echo If you see this, it worked
- )
复制代码 是一个复合语句(复合语句的意思就是,这一整个语句看起来很多行,但其实就是一条语句),而批处理的执行规则就是“至上而下,逐条执行。”,前面已经赋值 set VAR=before,所以%VAR%的值就为before,即便在复合语句中 set VAR=after 为%VAR%重新赋值,但是在这一条语句中%VAR%的值还是紧接上一条语句set VAR=before,所以- 实际上是在比较 "before" 和
- "after",这两者永远不会相等。
复制代码 这也算是批处理的一种特性吧,vbs、vb之类的语言就没有这种“变量延迟”。
例如,vb,这里显示的是a=2- Option Explicit
-
- Private Sub Command1_Click()
- Dim a
- a = 1
- If a = 1 Then
- a = 2
- MsgBox a
- End If
- End Sub
复制代码
|