标题: [其他] 【已解决】批处理空格使if语句无法判断(求大佬解释) [打印本页]
作者: Gin_Q 时间: 2019-12-16 08:35 标题: 【已解决】批处理空格使if语句无法判断(求大佬解释)
本帖最后由 Gin_Q 于 2019-12-16 10:35 编辑
正常代码:- @echo off & setlocal enabledelayedexpansion &rem by author Gan
- for /l %%a in (1900,1,2020) do (
- call :runnian %%a)
- pause & exit
- :runnian
- set m2=28
- set /a n=0
- set /a a=%1%%4,a1=%1%%100,a2=%1%%400
- if !a! equ 0 set n=1& if !a1! equ 0 set n=0
- if !a2! equ 0 set n=1
- if !n! equ 1 (set m2=29) else (set m2=28)
- echo %1 !m2! !n!
- 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
请按任意键继续. . .
------------------------------------------------------------------------------分割线---------------------------------------------------------------------------------
少一个空格- @echo off & setlocal enabledelayedexpansion &rem by author Gan
- for /l %%a in (1900,1,2020) do (
- call :runnian %%a)
- pause & exit
- :runnian
- set m2=28
- set /a n=0
- set /a a=%1%%4,a1=%1%%100,a2=%1%%400
- if !a! equ 0 set n=1 & if !a1! equ 0 set n=0
- if !a2! equ 0 set n=1
- if !n! equ 1 (set m2=29) else (set m2=28)
- echo %1 !m2! !n!
- 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
- @echo off & setlocal enabledelayedexpansion
- echo;no space
- set n=1& rem
- echo;[!n!]
- if !n! equ 1 (echo;EQU) else (echo;NOT EQU)
- echo;with space
- set n=1 & rem
- echo;[!n!]
- if !n! equ 1 (echo;EQU) else (echo;NOT EQU)
- 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行代码改成这样:- if "!a!" equ "0" (
- set "n=1"
- )
- if "!a1!" equ "0" (
- set "n=0"
- )
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |