Scripts to get hour not always correct

Discussion forum for all Windows batch related topics.

Moderator: DosItHelp

Post Reply
Message
Author
goodywp
Posts: 265
Joined: 31 Jul 2017 09:57

Scripts to get hour not always correct

#1 Post by goodywp » 20 Mar 2022 07:50

Hi All,

I have a script to divide the hour into two periods, from 10-21 set not run, the rest set run as below:

Code: Select all

SET hour=%time:~0,2%
echo %hour%
IF %hour% leq 21 (
	IF %hour% geq 10 (
			SET shouldrun=False
			echo 1
			) else (
			SET shouldrun=True
			echo 2
			)
	) else (
	set shouldrun=True	
	echo 3
	)

if "%shouldrun%" == "True" goto to_run
if "%shouldrun%" == "False" goto not_run

:to_run

echo run

goto end

:not_run
echo not run

:end
But from the log file the time is not always correct, some case supposed to be run shows not run....
I know hour from time usually 24 format. please correct me if I am wrong.
Any idea?

Compo
Posts: 600
Joined: 21 Mar 2014 08:50

Re: Scripts to get hour not always correct

#2 Post by Compo » 20 Mar 2022 17:25

The first thing you need to understand is that %TIME% is locale, PC, and user configurable and may not therefore return a string in the format you require for splitting, and even if it is, that may not be returned as a 24 hour clock string.

There are many ways of retrieving the time in a consistent format, and I would advise that you choose one such alternative.

The following method, which works on supported Operating Systems pre-Windows 11 uses WMI via their built-in WMIC executable, and could achieve your task in just a single line batch file:

Code: Select all

@%SystemRoot%\System32\wbem\WMIC.exe Path Win32_LocalTime Where "Hour < 10 Or Hour > 21" Assoc 2>NUL | %SystemRoot%\System32\find.exe ":" && Echo run
Alternatively you could use supported Operating System's built-in PowerShell executable, and still do it with a one line batch file:

Code: Select all

@%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoL -NoP "[Int]$hr=Get-Date -Format 'HH'; If ($hr -lt 10 -or $hr -gt 21) { Exit 0 }" && Echo Run

goodywp
Posts: 265
Joined: 31 Jul 2017 09:57

Re: Scripts to get hour not always correct

#3 Post by goodywp » 22 Mar 2022 14:07

Thanks Compo! It works....

goodywp
Posts: 265
Joined: 31 Jul 2017 09:57

Re: Scripts to get hour not always correct

#4 Post by goodywp » 29 Apr 2022 08:07

Compo wrote:
20 Mar 2022 17:25
The first thing you need to understand is that %TIME% is locale, PC, and user configurable and may not therefore return a string in the format you require for splitting, and even if it is, that may not be returned as a 24 hour clock string.

There are many ways of retrieving the time in a consistent format, and I would advise that you choose one such alternative.

The following method, which works on supported Operating Systems pre-Windows 11 uses WMI via their built-in WMIC executable, and could achieve your task in just a single line batch file:

Code: Select all

@%SystemRoot%\System32\wbem\WMIC.exe Path Win32_LocalTime Where "Hour < 10 Or Hour > 21" Assoc 2>NUL | %SystemRoot%\System32\find.exe ":" && Echo run
Alternatively you could use supported Operating System's built-in PowerShell executable, and still do it with a one line batch file:

Code: Select all

@%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoL -NoP "[Int]$hr=Get-Date -Format 'HH'; If ($hr -lt 10 -or $hr -gt 21) { Exit 0 }" && Echo Run
Hi Compo,
Now I got the issues if I have more than two time slices as below:

Code: Select all

@%SystemRoot%\System32\wbem\WMIC.exe Path Win32_LocalTime Where "Hour > 8 Or Hour < 14" Assoc 2>NUL | %SystemRoot%\System32\find.exe ":" && SET shouldrun=Jum
@%SystemRoot%\System32\wbem\WMIC.exe Path Win32_LocalTime Where "Hour > 14 Or Hour < 20" Assoc 2>NUL | %SystemRoot%\System32\find.exe ":" && SET shouldrun=True
@%SystemRoot%\System32\wbem\WMIC.exe Path Win32_LocalTime Where "Hour > 20 Or Hour < 8" Assoc 2>NUL | %SystemRoot%\System32\find.exe ":" && SET shouldrun=False
echo %shouldrun%
I tried on 9:00AM and it echo True which is within "Hour > 14 Or Hour < 20", what is wrong here? It supposed to be Jum ("Hour > 8 Or Hour < 14" )

atfon
Posts: 178
Joined: 06 Oct 2017 07:33

Re: Scripts to get hour not always correct

#5 Post by atfon » 29 Apr 2022 08:39

Have a look at this post from aGerman where he explains how to set a clock to AM/PM: viewtopic.php?f=3&t=2051#p64840

Post Reply