We help IT Professionals succeed at work.

outputting the time to a file from the command line

bpl5000
bpl5000 asked
on
I have a batch file that does the following...

echo %date% - %time% - %computername% - %username%>> \\server\share\log.txt

This works, but the time is formatted for 24 hours and it shows to the 100th of a second.  I want the format to look like it does when you execute "time/t" at the command line (for example, 01:48 PM).

I tried putting it into an environment variable by doing "set sTime=time/t", but that doesn't work.  How can I output time in the format that I want?  I need the output to look like...

Tue 11/01/2011 - 01:48 PM - computername - username

Is this doable in a batch file?
Comment
Watch Question

IT Consultancy
SILVER EXPERT
Commented:
OK to get it like time /t You could do:

@echo off
for /f "delims=" %%T in (' time /t') do set sTime=%%T

Steve
Steve KnightIT Consultancy
SILVER EXPERT

Commented:
Or to get more control over the formatting look at my article here:
http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/MS_DOS/A_1153-Using-dates-in-batch-files-scripts.html

e.g.

@echo off
echo wscript.echo right(100+hour(time),2) ^& "-" ^& right(100+minute(time),2) > "%temp%\dateparts.vbs"
for /f "tokens=1 delims=" %%a in ('cscript //nologo "%temp%\dateparts.vbs"') do set hhmm=%%a
echo Now you can use this in your file: %hhmm%
Steve KnightIT Consultancy
SILVER EXPERT

Commented:
And for a final way...

%time:~0,5%

will take the first 5 chars of the time.... though otherwise will display as your time settings so could be  1:15 or 13:15 or 01:15 etc.

So I'd got vbscript option above or time /t if you have to!

Steve

Author

Commented:
dragon-it, your first way would be perfect, but I get the error

%%T was unexpected at this time.
Bill PrewTest your restores, not your backups...
SILVER EXPERT
Expert of the Year 2019
Top Expert 2016

Commented:
Sounds like you have a typo, Steve's code as shown looks good, can you paste up your exact code so we can take a look?

You are running this in a BAT file right, not from the command line?

~bp

Commented:
@bpl5000:

As Bill was pointing out, if you are trying Steve's script as a DOS command line, meaning not running from within a batch file but rather a command line, you will get this error.

If you wish to try it in a command line (DOS window), you have to use only one %, not two, as following:

for /f "delims=" %T in (' time /t') do set sTime=%T

And by the way, %T or %%T are case sensitive.
Steve KnightIT Consultancy
SILVER EXPERT

Commented:
Thanks guys for clarifying.

OT... but I saw some scripts the other day Rene that used %%? ... was trying to work out wth was going on... I presume it works the same way as the letters... did wonder what would be the next parameter then, I suppose the next ascii character?

Commented:
Sorry Steve, my working memory has trouble processing new informations as my executive functions are challanged due to a extensive lack of sleep. :)

You know a lot more then I do in regards to programming, scripting, ect and more etc..., so I will assume that your question is more of a statement. Sorry, I just can't figure it out.

Most regards and lots of cheers,
Rene
Steve KnightIT Consultancy
SILVER EXPERT

Commented:
Sorry rene, I was just waffling on OT ... I suppose after seeing you saying it was case sensitive %%t different to %%T.  This script I saw used %%? ... and it seems it does work that way:

C:\4. WIP\EE>for /f "delims=, tokens=1-5" %! in ("a,b,c,d") do @echo %! - %" - %# - %$
a - b - c - d

That could lead to some very criptic batch files :-)

No doubt this is the "proper" way to do it and been used for years by others ;)

Commented:
@Steve: I never thought using ! as a variable by it's own! You rick!!

Commented:
Oups, I ment "You rock!!"
Steve KnightIT Consultancy
SILVER EXPERT

Commented:
Completely OT now sorry...

The help with for says to use a-z and A-Z but this opens up (and this is bit sad remembering ascii code order but they used to follow the Dragon keyboard layout pretty well and knowing that 42 was a * etc. was useful then;):

!"#$%&'()*+,-./
and perhaps more interestingly
0123456789
:;<=>?
@A-Z
[\]^_
`a-z
{|}~

Seems the only one you can't use is %%% ... and <|> and ^ need escaping with an ^, i.e. %%^< etc.

Trying to think where useful... maybe %%1 - %%9 for params 1-9 etc?
@echo off

REM Only ones that don't work are %
REM less than / more than / pipe / caret need to be escaped with ^

cls
echo.
echo ASCII 33 to 47 - !"#$%^&'()*+,-./
for /f "delims=, tokens=1-17" %%! in ("a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q") do @echo %%! - %%" - %%# - %%$ - %%% - %%& - %%' - %%( - 

%%) - %%* - %%+ - %%, - %%- - %%. - %%/

echo.
echo Numbers etc. ASCII 48 to 64 - 0123456789:;^<=^>?@
for /f "delims=, tokens=1-17" %%0 in ("a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q") do @echo %%0 - %%1 - %%2 - %%3 - %%4 - %%5 - %%6 - %%7 - 

%%8 - %%9 - %%: - %%; - %%^< - %%= - %%^> - %%? - %%@

echo.
echo ASCII 91 to 96 - [\]^^
for /f "delims=, tokens=1-6" %%[ in ("a,b,c,d,e,f") do @echo %%[ - %%\ - %%] - %%^^ - %%_ - %%`

echo.
echo ASCII 123 to 126 ^
{^|}~
for /f "delims=, tokens=1-4" %%{ in ("a,b,c,d") do @echo %%{ - %%^| - %%} - %%~

Open in new window

ASCII 33 to 47 - !"#$^&'()*+,-./
a - b - c - d - % - k - l - m - n - o

Numbers etc. ASCII 48 to 64 - 0123456789:;<=>?@
a - b - c - d - e - f - g - h - i - j - k - l - m - n - o - p - q

ASCII 91 to 96 - [\]^
a - b - c - d - e - f

ASCII 123 to 126 {|}~
a - b - c - d

Open in new window

Commented:
Impressed, I am... again!!

Commented:
By the way, what does OT mean? On Tea?   :)
Bill PrewTest your restores, not your backups...
SILVER EXPERT
Expert of the Year 2019
Top Expert 2016

Commented:
Off topic.

Author

Commented:
Interesting!  Anyway, I was testing at the command line (D'oh!).  I put it into a batch file and it works great.  Thanks for the help!

Explore More ContentExplore courses, solutions, and other research materials related to this topic.