Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Batch command date and time in file name

I am compressing files using WinZip on the command line. Since we archive on a daily basis, I am trying to add date and time to these files so that a new one is auto generated every time.

I use the following to generate a file name. Copy paste it to your command line and you should see a filename with a Date and Time component.

echo Archive_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.zip 

Output

Archive_20111011_ 93609.zip 

However, my issue is AM vs PM. The AM time stamp gives me time 9 (with a leading blank space) vs. 10 naturally taking up the two spaces.

I guess my issue will extend to the first nine days, first 9 months, etc. as well.

How do I fix this so that leading zeroes are included instead of leading blank spaces so I get Archive_20111011_093609.zip?

like image 792
Raj More Avatar asked Oct 11 '11 13:10

Raj More


People also ask

How do you insert date and time in filename?

I'd use YYYY-MM-DD HHmmss for filenames, unless there is a particular need for timezones or a possible need to parse them into ISO dates; in those cases an ISO date would probably be preferrable.

What is the meaning of %1 in batch?

When used in a command line, script, or batch file, %1 is used to represent a variable or matched string. For example, in a Microsoft batch file, %1 can print what is entered after the batch file name.


1 Answers

Another solution:

for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set datetime=%%I 

It will give you (independent of locale settings!):

  20130802203023.304000+120 ( YYYYMMDDhhmmss.<milliseconds><always 000>+/-<minutes difference to UTC>  ) 

From here, it is easy:

set datetime=%datetime:~0,8%-%datetime:~8,6% 20130802-203023 

For Logan's request for the same outputformat for the "date-time modified" of a file:

for %%F in (test.txt) do set file=%%~fF for /f "tokens=2 delims==" %%I in ('wmic datafile where name^="%file:\=\\%" get lastmodified /format:list') do set datetime=%%I echo %datetime% 

It is a bit more complicated, because it works only with full paths, wmic expects the backslashes to be doubled and the = has to be escaped (the first one. The second one is protected by surrounding quotes).

like image 198
Stephan Avatar answered Sep 28 '22 22:09

Stephan