Пакетный режим: я хочу вызвать команду после 5 часов утра, но она выводит ее менее 5 часов утра, независимо от того, что

Ни

@echo off

set hh=!tm:~0,2
set mm=!tm:~3,2
set ss=!tm:~5,2
set ms=!tm:~7,2

if !hh! gtr **5** (
    echo gtr 5
    pause
    goto success
)


pause
goto fail

:success
echo Success!
pause
exit

:fail
echo Fail!
pause
exit

или же

@echo off

set hh=!tm:~0,2
set mm=!tm:~3,2
set ss=!tm:~5,2
set ms=!tm:~7,2

if !hh! gtr **05** (
    echo gtr 5
    pause
    goto success
)


pause
goto fail

:success
echo Success!
pause
exit

:fail
echo Fail!
pause
exit

работает так, как мне нужно

Это должно привести к выводу, что оно больше 5 часов утра, когда 10 часов утра. Он только утверждает, что меньше 5 часов утра, хотя сейчас 10 часов утра. Кроме того, если я устанавливаю час на 5 часов утра, он все равно говорит, что он меньше 5 часов утра и не равен 5 часам утра.

Он делает это только в любое время, которое представляет собой одну цифру, поэтому 0-9 (что с 12 до 9 утра). Каждый раз, когда это двузначное число, то есть 10-23 (то есть с 10:00 до 23:00), работает и говорит правильные вещи.

2 ответа

Решение

Попробуй это:

@ECHO OFF &SETLOCAL
set /a HH=0
FOR /f "tokens=1*delims=0" %%a IN ("$0%time:~0,2%") DO SET /a HH=%%b 2>nul
IF %HH% GTR 5 ECHO Alert!
@ECHO OFF
SETLOCAL
SET testvalues=" 1" " 4" " 5" " 6" "10" "12" "13" "19" "20" "23" "01" "04" "05" "06" "08" " 0" 
FOR %%i IN (%testvalues%) DO CALL :test2 %%i
echo==================================
FOR %%i IN (%testvalues%) DO CALL :test %%i
GOTO :eof
:test
SET value=%~1
SET "HH="
FOR /f "delims=0" %%a IN ("%value:~0,2%") DO SET /a HH=%%a
IF %HH% GTR 5 (ECHO Alert! FOR %1 ) ELSE (ECHO Silent FOR %1 )

GOTO :EOF
:test2
SET value=%~1
SET "HH="

SET /a HH=1%value: =0%
IF %HH% GTR 105 (ECHO Alert! FOR %1 ) ELSE (ECHO Silent FOR %1 )

GOTO :EOF

Результаты:

Silent FOR " 1" 
Silent FOR " 4" 
Silent FOR " 5" 
Alert! FOR " 6" 
Alert! FOR "10" 
Alert! FOR "12" 
Alert! FOR "13" 
Alert! FOR "19" 
Alert! FOR "20" 
Alert! FOR "23" 
Silent FOR "01" 
Silent FOR "04" 
Silent FOR "05" 
Alert! FOR "06" 
Alert! FOR "08" 
Silent FOR " 0" 
=================================
Silent FOR " 1" 
Silent FOR " 4" 
Silent FOR " 5" 
Alert! FOR " 6" 
Silent FOR "10" 
Alert! FOR "12" 
Alert! FOR "13" 
Alert! FOR "19" 
Silent FOR "20" 
Alert! FOR "23" 
Silent FOR "01" 
Silent FOR "04" 
Silent FOR "05" 
Alert! FOR "06" 
Alert! FOR "08" 
Missing operand.
5 was unexpected at this time.

Примечание: исправлено поведение для часов =10, 20 и 0

Другие вопросы по тегам