批处理脚本中有什么方法可以检查时间格式吗?
实施例。 我有一个时间格式错误的场景:
set tm=431:00:00
如果tm是格式为HH:MM:SS的时间,我想检查它。
if %tm% == %format% (
do something ) else (
do nothing )
批处理脚本是否可以像这样进行一些检查?
请跟我一起。感谢。
答案 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脚本的输出。