Board logo

标题: [文本处理] 批处理if嵌套里不能正常获取变量的值是什么原因? [打印本页]

作者: jwt2014    时间: 2014-3-8 11:06     标题: 批处理if嵌套里不能正常获取变量的值是什么原因?

本帖最后由 pcl_test 于 2016-11-1 13:37 编辑

set  mm=1
echo %mm%
if %mm% == 1 (
        set "dd=%date:~11,2%"
        set/a m1=0
        set/a n1=0
        if "%dd%"=="周一" set/a m1=1
        if "%dd%"=="周二" set/a m1=1
        if "%dd%"=="周三" set/a m1=1
        if "%dd%"=="周四" set/a m1=1
        if %m1% == 1 (
                c:\jiangdu\guanji2.bat
                goto end
        ))


pause

原本以为这是一个简单的if嵌套判断,结果在执行时始终在第一个if语句的时候就出错如下
C:>set  mm=1

C:>echo 1
1
此时不应有 (。

C:>   if  == 1 (

显然mm变量时赋值了的,但在if判断时却是空的,不知为何?而且更奇怪的是,当把if嵌套里的if(红色标记的)语句删除,就能正常执行。不知其中有什么相互矛盾的?特请教!!
作者: DAIC    时间: 2014-3-8 12:08

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set mm=1
  4. echo %mm%
  5. if %mm% == 1 (
  6.     set "dd=%date:~11,2%"
  7.     set m1=0
  8.     set n1=0
  9.     if "%dd%"=="周一" set m1=1
  10.     if "%dd%"=="周二" set m1=1
  11.     if "%dd%"=="周三" set m1=1
  12.     if "%dd%"=="周四" set m1=1
  13.     if !m1! == 1 (
  14.         c:\jiangdu\guanji2.bat
  15.         goto end
  16.     )
  17. )
  18. :end
复制代码

作者: jwt2014    时间: 2014-3-8 16:45

谢谢,估计就是这个原因。
头一次弄bat,没想到里面居然有这名堂。
总结一点:但凡涉及嵌套语句(专业叫复合语句),如果里面有即时赋值,即时调用的就要考虑延迟变量。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2