Как проверить формат времени с помощью пакетного скрипта? - PullRequest
0 голосов
/ 12 декабря 2011

есть ли способ в пакетном скрипте проверить формат времени?

Пример.У меня есть сценарий с неправильным форматом времени:

set tm=431:00:00

Я хочу проверить его, если время tm в формате ЧЧ: ММ: СС.

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

ЭтоМожно ли в пакетном скрипте выполнить такую ​​проверку?

Пожалуйста, пощадите меня.Спасибо.

Ответы [ 2 ]

1 голос
/ 04 октября 2013

Один простой вариант - использовать 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 ...)1005 *

Вы можете улучшить скрипт, выполнив несколько отдельных проверок.Например: если первая цифра часа - [2], то вторая цифра должна быть [0-3].Однако, несмотря на все эти усилия, я бы предпочел просто вызвать простой сценарий PowerShell, чтобы проверить правильность времени и использовать вывод сценария PS в вашем пакетном файле.

1 голос
/ 13 декабря 2011
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

Предыдущий пример может дать вам больше идей о том, как проверить другие случаи ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...