所以我有一个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.
答案 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
)