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

[文本处理] 批处理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(红色标记的)语句删除,就能正常执行。不知其中有什么相互矛盾的?特请教!!

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

TOP

  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
复制代码

TOP

返回列表