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

[其他] 【已解决】批处理空格使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
请按任意键继续. . .

第九行代码:
if !a! equ 0 set n=1 & if !a1! equ 0 set n=0

TOP

  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

TOP

回复 3# a20150604


    请问那个空格使脚本发生了什么?我一直不明白!!!

TOP

回复 4# Gin_Q

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

评分人数

    • Gin_Q: 明白了!谢谢!技术 + 1

TOP

回复 2# Gin_Q


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

评分人数

    • Gin_Q: 应该给他加上引号!谢谢!技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表