cmd行重命名文件,包含日期和时间

use*_*620 14 time filenames cmd date add

项目向前移动,我可以看到为什么创建.bat文件来做事情会让人上瘾!我现在可以定期保存somefile.txt,然后通过添加时间和日期重命名somefile.txt来创建一个唯一的文件名

ren somefile.txt somefile_%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~3,2%%date:~-4,4%.txt
Run Code Online (Sandbox Code Playgroud)

例如,上面的代码刚刚重命名somefile.txtsomefile_1317_13022011.txt (1317hrs on 13th February 2011)

我跑了

ren somefile.txt somefile_%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~7,2%%date:~-4,4%.txt 
Run Code Online (Sandbox Code Playgroud)

昨天,它成功运行到午夜,然后崩溃(语法错误)虽然它保存为日期(2011年1月12日)的12012011而不是正确的日期12022011.

当前版本是否会在午夜过后?我对英国与美国的日期格式混淆了吗?

sil*_*ete 16

Animuson提供了一个体面的方法,但没有帮助理解它.我一直在寻找,并遇到了这个命令的论坛帖子:

Echo Off
IF Not EXIST n:\dbfs\doekasp.txt GOTO DoNothing

copy n:\dbfs\doekasp.txt n:\history\doekasp.txt

Rem rename command is done twice (2) to allow for 1 or 2 digit hour,
Rem If before 10am (1digit) hour Rename starting at location (0) for (2) chars,
Rem will error out, as location (0) will have a space
Rem and space is invalid character for file name,
Rem so second remame will be used.
Rem
Rem if equal 10am or later (2 digit hour) then first remame will work and second will not
Rem as doekasp.txt will not be found (remamed)


ren n:\history\doekasp.txt doekasp-%date:~4,2%-%date:~7,2%-%date:~10,4%_@_%time:~0,2%h%time:~3,2%m%time:~6,2%s%.txt
ren n:\history\doekasp.txt doekasp-%date:~4,2%-%date:~7,2%-%date:~10,4%_@_%time:~1,1%h%time:~3,2%m%time:~6,2%s%.txt
Run Code Online (Sandbox Code Playgroud)

我总是先说YYYYMMDD,但是想增加时间.在这里你会看到他已经给出了为什么0,2将不起作用和1,1将会出现的原因,因为(空格)是一个无效的字符.这让我看到了这个问题.此外,默认情况下,您处于24小时模式.

我结束了:

ren Logs.txt Logs-%date:~10,4%%date:~7,2%%date:~4,2%_%time:~0,2%%time:~3,2%.txt
ren Logs.txt Logs-%date:~10,4%%date:~7,2%%date:~4,2%_%time:~1,1%%time:~3,2%.txt
Run Code Online (Sandbox Code Playgroud)

输出:

Logs-20121707_1019
Run Code Online (Sandbox Code Playgroud)


See*_*ain 8

挖掘旧线程,因为所有解决方案都错过了最简单的解决方案......

它失败了,因为时间变量的替换导致文件名中的空格,这意味着它将文件名的最后部分视为命令中的参数.

最简单的解决方案是在引号中包含所需的文件名"filename".

然后,你可以有你想要的任何日期模式(对那些非法字符,如例外/,\...)

我建议反向日期订单YYYYMMDD-HHMM:

ren "somefile.txt" "somefile-%date:~10,4%%date:~7,2%%date:~4,2%-%time:~0,2%%time:~3,2%.txt"
Run Code Online (Sandbox Code Playgroud)

  • @sunk818 这将是一个语言环境问题。%date 使用计算机上的日期格式。这里的所有答案都假设日期格式为 DD/MM/YYYY 而不是 MM/DD/YYYY。如果您想要一种与语言环境无关的方式来执行此操作,则解决方案会稍微复杂一些 - 您必须使用命令 `wmic os get localdatetime` 的结果。一个例子可以在 [link](http://stackoverflow.com/a/10945887/1793348) 中看到 (2认同)

小智 5

以下应该是您正确的解决方案

ren somefile.txt  somefile_%time:~0,2%%time:~3,2%-%DATE:/=%.txt
Run Code Online (Sandbox Code Playgroud)


小智 5

我采用了上面的内容,但必须再添加一块,因为它在小时后放置了一个空格,这导致重命名命令出现语法错误。我用了:

    set HR=%time:~0,2%
    set HR=%Hr: =0% 
    set HR=%HR: =%
    rename c:\ops\logs\copyinvoices.log copyinvoices_results_%date:~10,4%-%date:~4,2%-%date:~7,2%_%HR%%time:~3,2%.log 
Run Code Online (Sandbox Code Playgroud)

这给了我我需要的格式:copyinvoices_results_2013-09-13_0845.log