2014-03-07 120 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 
)