Generate unique file name with timestamp in batch script

前端 未结 7 1190
隐瞒了意图╮
隐瞒了意图╮ 2020-12-13 13:07

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 probl

7条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-13 13:22

    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.

提交回复
热议问题