Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generate unique file name with timestamp in batch script

In my .bat file I want to generate a unique name for files/directories based on date-time.

e.g.

Build-2009-10-29-10-59-00 

The problem is that %TIME% won't do because it contains characters that are illegal in filename (e.g. :).

Is there something like tr in batch files?

Any other ideas how to solve this (that don't require extra command line utilities aside from the batch interpreter)?

like image 278
Assaf Lavie Avatar asked Oct 29 '09 10:10

Assaf Lavie


1 Answers

EDIT: A better way of doing this is to take a date/time string that has a defined and unchanging format instead of using the locale-defined ones from %date% and %time%. You can use the following to get it:

for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined mydate set mydate=%%x 

It yields something like 20120730203126.530000+120 and you can use that to construct your file names.


(Old answer below)

You can simply replace the offending character with an empty string:

echo %time::=% 

The syntax %var:str1=str2% takes the environment variable (or pseudo-variable in case of %TIME% and replaces str1 by str2. If nothing follows after the equals sign then str1 is simply deleted.

In your specific case I think you'd want the following:

rem cut off fractional seconds set t=%time:~0,8% rem replace colons with dashes set t=%t::=-% set FileName=Build-%date%-%t% 

A more brute-force way in case you don't know whether colons are used (but the order of the time would be the same):

set FileName=Build-%date%-%time:~0,2%-%time:~3,2%-%time:~6,2% 

All preceding things, however, assume that you use standard ISO 8601 date format, i. e. 2009-10-29. I'd assume this as simply normal, but some people use other formats so be careful. But since you didn't ask about the date I was assuming you didn't have a problem there.

like image 62
Joey Avatar answered Sep 18 '22 22:09

Joey