【问题标题】:cmd line rename file with date and time命令行用日期和时间重命名文件
【发布时间】:2011-02-13 13:28:51
【问题描述】:

项目向前推进,我明白为什么创建 .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。

当前版本会运行到午夜吗?我是否对英国和美国的日期格式感到困惑?

【问题讨论】:

  • 这是对上一个问题的跟进吗?如果是这样,您需要使这个问题自包含且自给自足。目前,这一切似乎都毫无意义。 :)
  • 这里的所有答案都试图解决机器不友好的问题(这里不会争论人类友好性)美国 12 小时时间格式,尽管通常依赖于语言环境。使用 24 小时格式的独立于语言环境的时间源怎么样?见stackoverflow.com/questions/203090/…

标签: date time cmd filenames add


【解决方案1】:

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

【讨论】:

  • 我发现您可以获取时间戳,然后用 0 替换可能的空格,而不是依赖失败的重命名:set logtime=%time:~0,2%% time:~3,2% set logtime=%logtime: =0%
  • 始终不建议使用 hacks(可维护性和保持简单易懂应该始终是所有工作的第一条黄金法则)。下面的大多数解决方案都比这更干净(尽管您确实使用了最好的时间格式恕我直言)。
【解决方案2】:

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

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

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

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

我建议颠倒日期顺序 YYYYMMDD-HHMM:

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

【讨论】:

  • 您的文件似乎显示为 YYYYDDMM-HHMM(日期和月份颠倒了)。
  • @sunk818 这将是一个语言环境问题。 %date 使用您计算机上的日期格式。这里的所有答案都假设日期格式为 DD/MM/YYYY 而不是 MM/DD/YYYY。如果您想要一种与语言环境无关的方式来执行此操作,则解决方案会稍微复杂一些 - 您必须使用命令 wmic os get localdatetime 的结果。这方面的一个例子可以在link 中看到
  • 谢谢,这就解释了。我糊涂,你糊涂。
【解决方案3】:

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

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

【讨论】:

  • 结果将是somefile_1717-2019-04-15.txt(小时-分钟-年-月-日)。
【解决方案4】:

我采用了上述方法,但不得不再添加一个,因为它在一小时后放置了一个空格,这导致重命名命令出现语法错误。 我用过:

    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

【讨论】:

  • 如果您的计算机没有将时间格式化为月/日/年,也就是说,如果您不在美国,这将失败。
【解决方案5】:

%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%

祝你好运

【讨论】:

    【解决方案6】:
    ls | xargs -I % mv % %_`date +%d%b%Y`
    

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

    【讨论】:

    • cmd 语法无效。
    【解决方案7】:

    我也尝试过:

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

    我发现:

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

    【讨论】:

    • cmd 语法无效。
    • 完全正确..我没有看到问题是关于 cmd.. 将删除我的答案
    猜你喜欢
    • 2013-03-06
    • 2011-12-05
    • 1970-01-01
    • 2014-10-27
    • 2017-08-16
    • 1970-01-01
    • 2020-08-05
    相关资源
    最近更新 更多