找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23861|回复: 5

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

[复制链接]
发表于 2019-12-16 08:35:08 | 显示全部楼层 |阅读模式
本帖最后由 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
请按任意键继续. . .
 楼主| 发表于 2019-12-16 08:37:50 | 显示全部楼层
第九行代码:
if !a! equ 0 set n=1 & if !a1! equ 0 set n=0
发表于 2019-12-16 09:46:15 | 显示全部楼层
  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
 楼主| 发表于 2019-12-16 10:00:31 | 显示全部楼层
回复 3# a20150604


    请问那个空格使脚本发生了什么?我一直不明白!!!
发表于 2019-12-16 10:09:32 | 显示全部楼层
回复 4# Gin_Q

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

评分

参与人数 1技术 +1 收起 理由
Gin_Q + 1 明白了!谢谢!

查看全部评分

发表于 2019-12-16 10:30:08 | 显示全部楼层
回复 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技术 +1 收起 理由
Gin_Q + 1 应该给他加上引号!谢谢!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 13:32 , Processed in 0.018969 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表