Date cmd行使用日期和时间重命名文件

Date cmd行使用日期和时间重命名文件,date,time,cmd,filenames,add,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\u 1317\u 13022011.txt(2011年2月1

项目向前推进,我明白了为什么创建.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\u 1317\u 13022011.txt(2011年2月13日1317小时)

我跑

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


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

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

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

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
我总是将年份命名为第一个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,2%
无法设置为24小时格式,以空格(1-9)结束,而不是0(1-9)

四处走动:

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

设置
HR=%HR:=0%(如果有,用0替换空格)

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


祝你好运

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

这为我提供了所需的格式:
copyinvoices\u results\u 2013-09-13\u 0845.log

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

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

最简单的解决方案是将所需的文件名用引号括起来
“filename”

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

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

ren "somefile.txt" "somefile-%date:~10,4%%date:~7,2%%date:~4,2%-%time:~0,2%%time:~3,2%.txt"
一行就够了。
ls当前目录下的所有文件/dir,并将日期附加到每个文件。

我也尝试过这样做:

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

这是前一个问题的后续问题吗?如果是这样的话,你需要使这个问题自给自足。目前,这一切似乎毫无意义这里的所有答案都试图绕过不友好的机器(这里不讨论人类友好性)美国12小时时间格式,尽管通常依赖于语言环境。使用24小时格式的独立于区域设置的时间源怎么样。请参阅,与依赖失败的重命名不同,我发现您可以获取时间戳,然后用0:set logtime=%time:~0,2%%time:~3,2%set logtime=%logtime:=0%替换可能的空间。始终不建议使用hack(可维护性和保持简单易懂始终是所有工作的第一条黄金法则)。下面的大多数解决方案都比这更简洁(尽管您使用的是最佳时间格式IMHO)。您的文件似乎显示为YYDDMM-HHMM(日期和月份颠倒)@sunk818这可能是区域设置问题。%date在您的计算机上使用日期格式。这里的所有答案都假设日期格式为DD/MM/YYYY,而不是MM/DD/YYYY。如果您希望采用与区域设置无关的方法来实现这一点,解决方案会稍微复杂一点-您必须使用命令
wmic os get localdatetime
的结果他可以在感谢中看到,这就解释了。我很泥泞,而你是个傻瓜。如果你的计算机没有月/日/年格式的时间,也就是说,如果你不在美国,这将失败。这是无效的
cmd
syntax。完全正确..我没有看到问题是关于cmd的..将删除我无效的回答
cmd
syntax、 结果将是
somefile_1717-2019-04-15.txt
(小时-分钟-年-月-日)。
ren "somefile.txt" "somefile-%date:~10,4%%date:~7,2%%date:~4,2%-%time:~0,2%%time:~3,2%.txt"
ls | xargs -I % mv % %_`date +%d%b%Y`
<fileName>.<ext> --> <fileName>_<date>_<time>.<ext> 
rename 's/(\w+)(\.\w+)/$1'$(date +"%Y%m%d_%H%M%S)'$2/' *