我在Windows批处理中运行此脚本
set currentTime=%TIME%
if %currentTime% lss 09:00 echo "Before 09:00"
我得到
此时60是出乎意料的。
如果我删除第二个%,我的脚本将运行,但错误地返回“ 09:00之前” 不管我什么时候比较。 (我认为它将09:00与文字%currentTime进行比较)。
任何人都可以帮助您正确地比较时间吗?
答案 0 :(得分:3)
这是在cmd.exe
shell .bat文件脚本中执行此操作的简便方法。
FOR /F "delims=" %%a IN ('powershell -NoL -NoP -Command "(Get-Date).Hour"') DO (SET /A "HOUR=%%a")
IF %HOUR% LSS 9 (
ECHO "Before 09:00"
)
答案 1 :(得分:1)
要使用纯蝙蝠来执行此操作,您需要使用 EnableDelayedExpansion
并在时间设置中使用子字符串,并且如果时间布局是否使用AM / PM,则需要使用时间设置 leq
到 gtr
中的 %_bit_compare%
来解析该过程,或者...
另一件事是,我有限的英语不能帮助我很好地向您解释,抱歉:。
@echo off & setlocal EnableDelayedExpansion
set "currentTime=!TIME::=!" & set "currentTime=!currentTime:,=!" & set "conpareTime=900"
(set "_bit_compare=leq" & time /t | findstr /l "AM PM" || set "_bit_compare=gtr" )>nul
if "!currentTime:~0,4=!" %_bit_compare% "!conpareTime!" (echo/ !time:~0,5! Before 09:00) else (echo/ !time:~0,5! After 09:00)
或者,相同代码以非紧凑形式:
@echo off & setlocal EnableDelayedExpansion
set "currentTime=!TIME::=!"
set "currentTime=!currentTime:,=!"
set "_bit_compare=leq"
set "conpareTime=900"
(time /t | findstr /l "AM PM" || set "_bit_compare=gtr")>nul
if "!currentTime:~0,4=!" %_bit_compare% "!conpareTime!" (
echo/ !time:~0,5! Before 09:00
) else (
echo/ !time:~0,5! After 09:00
)
答案 2 :(得分:1)
您也可以按照以下步骤进行操作:
@echo off
setlocal EnableDelayedExpansion
rem Set time to compare to 09:00:00:
set "time_to_compare=090000"
:loop
for /F "skip=1 delims=." %%A IN ('wmic OS get localdatetime') do (
for /F "delims=" %%B IN ("%%A") do (
set "_time=%%B"
if !_time:~-6! GEQ 090000 (call :after) else (call :before)
)
)
:after
echo It is after 09:00:00^^!
pause>nul
exit /b 0
:before
echo It is before 09:00:00^^!
pause>nul
exit /b 0
我不知道你想做什么。因此,如果在此之后,它将 call
-而不是 goto
-:after
子例程;如果在此之前,它将{{1 }} call
。
您可以进行任何其他更改。
注意:时间将以24小时制和:before
格式生成;如果您是将HH:mm:ss
更改为21:00:00
。发生这种情况的方式是防止行为不端。该解决方案按要求以纯批处理方式编写。