如何使用批处理脚本检查时间格式?

时间:2011-12-12 04:51:43

标签: time batch-file

批处理脚本中有什么方法可以检查时间格式吗?

实施例。 我有一个时间格式错误的场景:

set tm=431:00:00

如果tm是格式为HH:MM:SS的时间,我想检查它。

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

批处理脚本是否可以像这样进行一些检查?

请跟我一起。感谢。

2 个答案:

答案 0 :(得分:1)

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

编辑按要求提供的新方法

以下代码检查: - 时间有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

上一个示例可能会为您提供有关如何检查其他案例的更多想法......

答案 1 :(得分: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脚本的输出。