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

Time 如何使用批处理脚本检查时间格式?,time,batch-file,Time,Batch File,在批处理脚本中是否有任何方法可以检查时间的格式 前。 我有一个时间格式错误的场景: set tm=431:00:00 我想检查tm是否是格式为HH:MM:SS的时间 if %tm% == %format% ( do something ) else ( do nothing ) 在批处理脚本中是否可以执行这样的检查 请给我一点时间。谢谢 set origTime=%time% echo %tm% | time > nul if errorlevel 1 ( echo Time

在批处理脚本中是否有任何方法可以检查时间的格式

前。 我有一个时间格式错误的场景:

set tm=431:00:00
我想检查tm是否是格式为HH:MM:SS的时间

if %tm% == %format% ( 
do something ) else (
do nothing )
在批处理脚本中是否可以执行这样的检查

请给我一点时间。谢谢

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

上一个示例可能会为您提供有关如何检查其他情况的更多信息…

一个简单的选项是使用
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对regex的支持有限,因此您无法通过上面的方法判断时间是否有意义(例如,如果小时数是25…)


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

也许这对您有用-它起作用了,但我忘记添加其他场景,例如如果%tm%的值为4,那么肯定会得到错误级别0,因为它是真的。你能给出一些关于这方面的想法吗?