首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows批处理文件未验证年份

Windows批处理文件未验证年份
EN

Stack Overflow用户
提问于 2014-03-07 11:52:07
回答 3查看 70关注 0票数 1

因此,我有一个windows批处理脚本,它可以验证我输入的日期格式是否正确。除了到了一年的一部分之外,一切都很好。它似乎没有以正确的xxxx格式验证年份。它可以接受任何数字。哪里出问题了,我不知道?修正建议?谢谢!

代码语言:javascript
复制
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.
EN

回答 3

Stack Overflow用户

发布于 2014-03-07 13:00:36

您缺少批处理文件的某些组件。

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

代码语言:javascript
复制
@Echo Off
SetLocal EnableDelayedExpansion

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

代码语言:javascript
复制
GoTo :EOF

:invalidDate
echo Invalid date.
票数 0
EN

Stack Overflow用户

发布于 2014-03-07 15:06:44

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

让我们以14这样的“无效”年份为例。

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

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

代码语言:javascript
复制
if "%year:~3%=="" goto invaliddate
if not "%year:~4%=="" goto invaliddate

  • ,而您没有在有效的

范围内检查year -is-year之后的值

票数 0
EN

Stack Overflow用户

发布于 2014-03-07 17:07:48

以下是验证年份的方法:

代码语言:javascript
复制
@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
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22241097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档