2011-12-12 73 views
0

有没有什么办法在批处理脚本中检查时间的格式?如何使用批处理脚本检查时间的格式?

Ex。 我有时间的格式错误的场景:

set tm=431:00:00 

我要检查它是否TM和格式HH时间:MM:SS。

if %tm% == %format% ( 
do something) else (
do nothing) 

是否有可能在批处理脚本中做一些这样的检查?

请随身携带。谢谢。作为请求

下面的代码检查

+0

也许这会对你有用 - http://stackoverflow.com/questions/1192476/windows-batch-script-format-date-and-time –

回答

1
set origTime=%time% 
echo %tm% | time > nul 
if errorlevel 1 (
    echo Time format is invalid 
) 
echo %origTime% | time > nul 

EDIT的新方法: - 该时间有3份结肠 分离 - 每个部分是一个数字 - 3号的乘法是不为零

for /F "tokens=1-3 delims=:" %%a in ("%tm%") do set HH=%%a& set MM=%%b& set SS=%%c 
rem Set ERRORLEVEL to zero: 
ver > nul 
set /A result=%HH%*%MM%*%SS% > nul 
if errorlevel 1 echo Bad format 
if %result% == 0 echo Bad format 

先前的例子可以给你如何对其他案件检查更多的想法...

+0

它的工作,但我忘了添加其他情况比如%tm%的值是4,肯定它的错误级别是0,因为它是真的。你能给出任何想法来解决这个问题吗? – quinekxi

1

一个简单的方法是使用FINDSTR /R进行正则表达式检查,看看时间是否具有正确的位数。

set tm=43:00:00 

echo %tm%| findstr /R "^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]$" 
if errorlevel 1 (
    echo Invalid time! 
) else (
    echo OK 
) 

这种做法的问题是,FINDSTR只有有限的正则表达式的支持,所以你不能真正与上面告诉我们,如果时间实际上是有意义的(例如,如果是每小时25 ...)

您可以通过做一些单独的检查来改进脚本。例如:如果小时的第一个数字是[2],那么第二个数字必须是[0-3]。然而,为了所有这些努力,我宁愿打电话给一个简单的PowerShell脚本来检查时间是否正确,并在批处理文件中使用PS脚本的输出。