2014-03-07 92 views
1

所以我有一个Windows批处理脚本,验证以查看我输入的日期格式是否是正确的格式。除了当它到达年份时,所有东西都可以正常工作。它似乎没有以xxxx的正确格式验证一年。它会接受任何号码。它打破了哪里,我不知道?修复建议?谢谢!Windows批处理文件不验证年

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. 

回答

0

您错过了批处理文件的某些组件。

在顶部,你应该具备以下条件:

@Echo Off 
SetLocal EnableDelayedExpansion 

您的代码具有一定的参考转到,但它不能去任何地方。底部应添加以下内容:

GoTo :EOF 

:invalidDate 
echo Invalid date. 
+0

我实际上拥有所有的代码。我只是把这个例子的业务结束了。这是一个相当大的批处理文件。 – JBacon9484

+0

当我使用完整的代码时,我的测试工作。当你尝试时,你得到的确切消息是什么? – Tony

+0

实际上没有消息,它的工作,只是不正确。你可以输入mm-dd-y,mm-dd-yy,mm-dd-yyyy,mm-dd-yyyyy等等,它会把你放入年份的任何数字放在那里。它应该只接受YYYY,尽管没有其他,只能接受。它的mm和dd部分验证它是否错误。年份不是。 – JBacon9484

0

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

让我们看看14这个'无效'年份。

您的14年1月1日计算将是今年= 114-10000

你真的需要检查year长度为4首。

if "%year:~3%=="" goto invaliddate 
if not "%year:~4%=="" goto invaliddate 
  • ,你是不是然后检查后一年,是数字在有效范围
+0

我对缺乏示例表示歉意。我以为我已经收录了它,但它肯定会让我失去理智。感谢您的答复。 – JBacon9484

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 
)