I need access to the current time from within a batch script. When typing time in the cmd, I get something like this:
The current time is: 16:58:03.98
Enter the new time:
What I need is not that but the hour, the minutes and the seconds in seperate buckets that I can then process in any arbitrary way. In other words I am looking for a function that returns the value for the hour so that I can assign it to a variable, like so:
var hour = GetCurrentHour()
Thanks!
Time and date are defined in two system variables: %time% & %date%
(Beware, the format depends of the regionnal & language settings)
now you have two variables %HH% for hours and %MM% for minutes. Hope this helped.
Combining all of those posts yields an answer to the original question:
Will load your HH MM and SS buckets with the respective values. You can, of course, type whatever variable names you want in place of those. (Barring reserved names.) You can also leave out the "." in the delims section, if you want fractional seconds to be stored in the last value. (%time% contains HH:MM:SS.ss)
What you have to do is basically use the %time% variable and specify to count a certain number of characters into the string to extract the part you want. Typing "echo %time%" in a cmd prompt returns something like this:
11:11:38.36
To get just the hour out of this string, type "echo %time:~-11,2%" to display just the first 2 characters. You are basically telling it to display the %time% variable - "echo %time...", count 11 characters backwards from the end of the string - "...:~11..." and grab 2 characters from that point - "...,2%"
To grab the minutes the command would be "echo %time:~8,2%"
To set the variable "hour" to the current hour you would type this:
set hour=%time:~-11,2%
You can also string parts together to create a custom format in whatever combo you need also. For example, to add dashes instead of a colon between the HH:MM:SS you would type this:
"echo %time:~-11,2%-%time:~-8,2%-%time:~-5,2%"
and get: HH-MM-SS
Hope this helps. We use the %date% variable and parts of it all the time to automatically create files in whatever string combo we need the filename to be in.
Combining Merstzik's and Benoit's answer and saving a call to an external program, you can do this:
It's dangerous to try to do this in CMD, because the result of TIME/T or %TIME% is locale dependent. If you are set on a single locale, you can do this:
However, you'd be much better off using PowerShell. CMD scripts are hard to write robustly. There's a lot to learn about writing good CMD scripts, but you'd be better off applying those brain cells to PowerShell.