Board logo

标题: [其他] 【已解决】批处理空格使if语句无法判断(求大佬解释) [打印本页]

作者: Gin_Q    时间: 2019-12-16 08:35     标题: 【已解决】批处理空格使if语句无法判断(求大佬解释)

本帖最后由 Gin_Q 于 2019-12-16 10:35 编辑

正常代码:
  1. @echo off & setlocal enabledelayedexpansion &rem by author Gan
  2. for /l %%a in (1900,1,2020) do (
  3. call :runnian %%a)
  4. pause & exit
  5. :runnian
  6. set m2=28
  7. set /a n=0
  8. set /a a=%1%%4,a1=%1%%100,a2=%1%%400
  9. if !a! equ 0 set n=1& if !a1! equ 0 set n=0
  10. if !a2! equ 0 set n=1
  11. if !n! equ 1 (set m2=29) else (set m2=28)
  12. echo %1 !m2! !n!
  13. goto :eof
复制代码
运行结果:
2000 29 1
2001 28 0
2002 28 0
2003 28 0
2004 29 1
2005 28 0
2006 28 0
2007 28 0
2008 29 1
2009 28 0
2010 28 0
2011 28 0
2012 29 1
2013 28 0
2014 28 0
2015 28 0
2016 29 1
2017 28 0
2018 28 0
2019 28 0
2020 29 1
请按任意键继续. . .

------------------------------------------------------------------------------分割线---------------------------------------------------------------------------------
少一个空格
  1. @echo off & setlocal enabledelayedexpansion &rem by author Gan
  2. for /l %%a in (1900,1,2020) do (
  3. call :runnian %%a)
  4. pause & exit
  5. :runnian
  6. set m2=28
  7. set /a n=0
  8. set /a a=%1%%4,a1=%1%%100,a2=%1%%400
  9. if !a! equ 0 set n=1 & if !a1! equ 0 set n=0
  10. if !a2! equ 0 set n=1
  11. if !n! equ 1 (set m2=29) else (set m2=28)
  12. echo %1 !m2! !n!
  13. goto :eof
复制代码

运行结果:
2000 29 1
2001 28 0
2002 28 0
2003 28 0
2004 28 1
2005 28 0
2006 28 0
2007 28 0
2008 28 1
2009 28 0
2010 28 0
2011 28 0
2012 28 1
2013 28 0
2014 28 0
2015 28 0
2016 28 1
2017 28 0
2018 28 0
2019 28 0
2020 28 1
请按任意键继续. . .

作者: Gin_Q    时间: 2019-12-16 08:37

第九行代码:
if !a! equ 0 set n=1 & if !a1! equ 0 set n=0
作者: a20150604    时间: 2019-12-16 09:46

  1. @echo off & setlocal enabledelayedexpansion
  2. echo;no space
  3. set n=1& rem
  4. echo;[!n!]
  5. if !n! equ 1 (echo;EQU) else (echo;NOT EQU)
  6. echo;with space
  7. set n=1 & rem
  8. echo;[!n!]
  9. if !n! equ 1 (echo;EQU) else (echo;NOT EQU)
  10. pause
复制代码
回复 2# Gin_Q
作者: Gin_Q    时间: 2019-12-16 10:00

回复 3# a20150604


    请问那个空格使脚本发生了什么?我一直不明白!!!
作者: a20150604    时间: 2019-12-16 10:09

回复 4# Gin_Q

你没运行我贴的代码看结果吗? 空格被赋给了 n, n 的值是 "1" 还是 "1 " , 是有区别的. cmd 没有严格完整的语法说明书, 一切细节以运行得到的事实为准
作者: Batcher    时间: 2019-12-16 10:30

回复 2# Gin_Q


好的代码风格可以避免这些问题,例如第9行代码改成这样:
  1. if "!a!" equ "0" (
  2.     set "n=1"
  3. )
  4. if "!a1!" equ "0" (
  5.     set "n=0"
  6. )
复制代码





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