[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 Hello123World 于 2011-8-20 14:38 编辑

诚如3楼所言,开启变量延迟即可。
  1. @echo off
  2.     set VAR=before
  3.     if "%VAR%" == "before" (
  4.         set VAR=after
  5.         if "%VAR%" == "after" @echo If you see this, it worked
  6.     )
  7. pause
复制代码
之所以不会显示“If you see this, it worked”,是因为
  1.    if "%VAR%" == "before" (
  2.         set VAR=after
  3.         if "%VAR%" == "after" @echo If you see this, it worked
  4.     )
复制代码
是一个复合语句(复合语句的意思就是,这一整个语句看起来很多行,但其实就是一条语句),而批处理的执行规则就是“至上而下,逐条执行。”,前面已经赋值    set VAR=before,所以%VAR%的值就为before,即便在复合语句中 set VAR=after 为%VAR%重新赋值,但是在这一条语句中%VAR%的值还是紧接上一条语句set VAR=before,所以
  1. 实际上是在比较 "before" 和
  2. "after",这两者永远不会相等。
复制代码
这也算是批处理的一种特性吧,vbs、vb之类的语言就没有这种“变量延迟”。

例如,vb,这里显示的是a=2
  1. Option Explicit
  2. Private Sub Command1_Click()
  3.     Dim a
  4.     a = 1
  5.     If a = 1 Then
  6.         a = 2
  7.         MsgBox a
  8.     End If
  9. End Sub
复制代码

TOP

返回列表