Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理文件闰年?_Windows_Batch File_Cmd - Fatal编程技术网

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