2011-02-13 169 views
10

项目向前移动,我可以看到为什么创建.bat文件来做事情会变得令人上瘾! 我现在可以节省定期somefile.txt,然后我加入的时间和日期来创建一个唯一的文件名带日期和时间的cmd行重命名文件

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

举个例子重命名somefile.txt,上面的代码刚刚更名为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 

昨天,它成功地跑,直到午夜,然后坠毁(语法错误),虽然它被保存为12012011的日期(12日2011年1月),而不是正确的日期为12022011.

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

+2

这是一个后续到以前的问题吗?如果是这样,你需要让这个问题独立自足。目前,这似乎没有什么意义。 :) – bzlm 2011-02-13 13:37:35

+0

所有的答案在这里试图要解决机器不友好的(不是要去争辩人类友好这里)美国12个小时的时间格式,尽管在一般语言环境的依赖。如何使用24小时格式的区域独立时间源?见http://stackoverflow.com/questions/203090/how-to-get-current-datetime-on-windows-command-line-in-a-suitable-format-for-us – 2014-07-21 14:22:31

回答

5

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

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

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%[email protected]_%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%[email protected]_%time:~1,1%h%time:~3,2%m%time:~6,2%s%.txt 

我总是名今年第一年月日,但想补充时间。在这里你会看到他已经给出了一个理由,为什么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

而不是依赖于一个失败的重命名,我发现了,你可以得到时间戳,再后来换成0的可能空间:设置logTime Description该条=%的时间:〜0.2 %%时间:〜3,2% 集logTime Description该条=%logTime Description该条:= 0% – Rassi 2013-02-25 11:12:33

+0

总是不宜使用黑客(可维护性和保持简单的遵循和理解应始终是所有工作的第一金科玉律)。下面的大多数解决方案比这更干净(虽然你确实使用最佳时间格式恕我直言)。 – SeeMoreGain 2014-09-18 01:46:08

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

然后用%HR%

好运更换%time:~0,2%

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

+0

如果您的计算机没有格式化为月/日/年的时间,也就是说,如果您不在美国,这将失败。 – neves 2016-03-02 20:25:03

5

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

据失败,因为在文件名的空间中的时间变化的结果的取代,这意味着它将该文件名作为参数到命令的最后一部分。

最简单的解决方法就是包围引号"filename"所需的文件名。

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

我建议反向日期顺序年月日 - HHMM:

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

看来你的文件显示为YYYYDDMM-HHMM(日期和月份相反)。 – Sun 2015-04-23 18:47:25

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

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

-2

我试图做同样的:

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

我发现:

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