Windows 批处理文件闰年?
我应该如何创建一个批处理文件程序,如果我输入一年,程序将识别它是否是闰年Windows 批处理文件闰年?,windows,batch-file,cmd,Windows,Batch File,Cmd,我应该如何创建一个批处理文件程序,如果我输入一年,程序将识别它是否是闰年 @echo off cls echo. LEAP YEAR echo. Enter Year: exit /b 0 嗯,只是我需要帮助,比如建议我应该做什么。它不会检查输入是否正确: @echo off set /p year=enter a year: call :isLeap %year% exit /b 0 :isLeap setlocal set "year=%~1" set /a _4=year%%4
@echo off
cls
echo. LEAP YEAR
echo. Enter Year:
exit /b 0
嗯,只是我需要帮助,比如建议我应该做什么。它不会检查输入是否正确:
@echo off
set /p year=enter a year:
call :isLeap %year%
exit /b 0
:isLeap
setlocal
set "year=%~1"
set /a _4=year%%4
set /a _100=year%%100
set /a _400=year%%400
::set _
if not %_4% equ 0 (
echo not leap
exit /b 0
)
if %_100% equ 0 (
if not %_400% equ 0 (
echo not leap
exit /b 0
)
)
echo leap
exit /b 0
您可能会滥用PowerShell的日期构造函数。如果试图将date对象设置为nnnn的2月29日时出错,则不是闰年
@echo关闭
setlocal
如果“%~1”==”“(
回显使用率:%~nx0年
后藤:EOF
)
>NUL 2>NUL powershell“获取日期-日期''%1.2.29'”&&(
回音闰年!
) || (
不是闰年。
)
后藤:EOF
您也可以使用JScript混合脚本执行同样的操作。代码多一点,但速度要快得多
@如果(@code节==@Batch)@那么
@回音
setlocal
如果“%~1”==”“(
回显使用率:%~nx0年
后藤:EOF
)
cscript/nologo/e:Jscript“%~f0”“%~1”和(
回音闰年!
) || (
不是闰年。
)
后藤:EOF
@结束
Quit(新日期(WSH.Arguments(0),1,29).getDate()-29);
因此,如果一年可以被4整除,则为闰,但如果一年也可以被100整除,则除外。在这种情况下,只有当一年也可以被400整除,则为闰(“可整除”表示除以给定数字的剩余部分为零)。这样,2000年和2400年是闰年,因为它们被400除时的余数是零,但2100年、2200年和2300年不是:这些是特殊情况,因为它们被100除时的余数是零
在设置/A
中,命令
boolean NOT运算符在其操作数为零时给出1,在任何其他情况下给出0,因此set/A“leap=!(year%%4)”
在年份可被4整除且在任何其他情况下为零时给出1;这给出了结果的第一部分
之后,我们需要在2100年、2200年和2300年从该值中减去1,但在2000年和2400年不减去任何值;即:
year year%%100 a=!!(year%%100) year%%400 b=!!(year%%400) a-b
2000 0 0 0 0 0
2100 0 0 100 1 -1
2200 0 0 200 1 -1
2300 0 0 300 1 -1
2400 0 0 0 0 0
如果年份不能被100整除,则a
和b
值都等于1,因此a-b
为零,结果仅由原始余数乘以4得出
这样,公式
set/A“leap=!(year%%4)+(!!(year%%100)-!!(year%%400))”
给出了完整的结果。人类将如何决定它?取决于他/她想要输入的内容。比如如果他/她输入2016年,那么这就是闰年。啊哈,有没有关于闰年的规则?还是随机的?你知道2028年会不会是闰年吗?4年后。这将是闰年。在我的维基百科版本中,有一些规则被描述。假设你只对未来80年感兴趣,那么只有一条规则remains@jeb:完成!我不喜欢解释比解决方案本身更大、更难编写的情况。这可能会更快。set/A“leap=!(year&3)+(!!(year%100)-!!(year&15))”
(按位而不是检查模)@npocmaka:我喜欢!然而,我要求你为没有经验的人写一个可以理解的解释,比如OP。。。
year year%%100 a=!!(year%%100) year%%400 b=!!(year%%400) a-b
2000 0 0 0 0 0
2100 0 0 100 1 -1
2200 0 0 200 1 -1
2300 0 0 300 1 -1
2400 0 0 0 0 0