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

时间:2011-02-13 13:28:51

标签: date time cmd filenames 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

例如,上面的代码刚刚将somefile.txt重命名为somefile_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 

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

目前的版本是否已经过了午夜?我对英国与美国的日期格式混淆了吗?

7 个答案:

答案 0 :(得分:14)

Animuson提供了一个体面的方式,但没有帮助理解它。我一直在寻找并遇到forum thread这个命令:

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

我总是先说出年份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

输出:

Logs-20121707_1019

答案 1 :(得分:8)

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

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

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

然后你可以拥有你想要的任何日期模式(/\等非法字符除外......)

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

ren "somefile.txt" "somefile-%date:~10,4%%date:~7,2%%date:~4,2%-%time:~0,2%%time:~3,2%.txt"

答案 2 :(得分:5)

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

ren somefile.txt  somefile_%time:~0,2%%time:~3,2%-%DATE:/=%.txt

答案 3 :(得分:4)

我接受了上面的内容,但不得不再添加一个,因为它在一小时后放了一个空格,这给了rename命令一个语法错误。 我用过:

    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 

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

答案 4 :(得分:3)

%time:~0,2%中的

问题无法设置为24小时格式,以空格(1-9)结束,而不是0(1-9)

四处走动:

设置HR=%time:~0,2%

设置HR=%Hr: =0% (replace space with 0 if any <has a space in between : =0>)

然后将%time:~0,2%替换为%HR%

祝你好运

答案 5 :(得分:-2)

ls | xargs -I % mv % %_`date +%d%b%Y`

一行就足够了。 ls当前目录下的所有文件/目录,并将日期附加到每个文件。

答案 6 :(得分:-2)

我试着这样做:

<fileName>.<ext> --> <fileName>_<date>_<time>.<ext> 

我发现:

rename 's/(\w+)(\.\w+)/$1'$(date +"%Y%m%d_%H%M%S)'$2/' *
相关问题