Windows批处理文件未验证年份

时间:2014-03-07 03:52:07

标签: windows batch-file

所以我有一个Windows批处理脚本验证我输入的日期格式是否格式正确。一切都工作正常,除非它到达年份的一部分。它似乎没有以正确的xxxx格式验证年份。它会接受任何号码。它在哪里破碎,我不知道?修复建议?谢谢!

set i=0
for %%a in (31 28 31 30 31 30 31 31 30 31 30 31) do (
   set /A i+=1
   set dpm[!i!]=%%a
)

set /P "inDate=Please insert FNOL date (MM-DD-YYYY format):  "
if "%inDate:~2,1%%inDate:~5,1%" neq "--" goto invalidDate
for /F "tokens=1-3 delims=-" %%a in ("%inDate%") do set "MM=%%a" & set "DD=%%b" & set "YYYY=%%c"
ver > NUL
set /A month=1%MM%-100, day=1%DD%-100, year=1%YYYY%-10000, leap=year%%4
if errorlevel 1 goto invalidDate
if not defined dpm[%month%] goto invalidDate
if %leap% equ 0 set dpm[2]=29
if %day% gtr !dpm[%month%]! goto invalidDate
if %day% lss 1 goto invalidDate

SET fnoldate=%YYYY%-%MM%-%DD%

ECHO.
SET /P confirmdate=You entered a FNOL date of "%fnoldate%".  Is this correct? [y/n]  
ECHO.

3 个答案:

答案 0 :(得分:0)

您遗漏了批处理文件的某些组件。

在顶部,您应该拥有以下内容:

@Echo Off
SetLocal EnableDelayedExpansion

您的代码有一些GoTo引用,但它不能去任何地方。您应该在底部添加以下内容:

GoTo :EOF

:invalidDate
echo Invalid date.

答案 1 :(得分:0)

嗯。举一个失败的例子会很有用。

让我们采取像14这样的“无效”年份。

您对01-01-14的计算将是年= 114-10000

您确实需要先检查year长度为4。

if "%year:~3%=="" goto invaliddate
if not "%year:~4%=="" goto invaliddate
  • 并且您不是然后检查有效范围内年份的年份数字

答案 2 :(得分:0)

以下是验证年份的方法:

@echo off
set year=1980
for /f "delims=1234567890" %%a in ("%year%") do echo you must enter numeric characters only & goto :EOF
if %year% GEQ 1800 if %year% LEQ 2014 (
    echo year is between 1800 and 2014
  ) else (
   echo enter a year between 1800 and 2014
)