2011-02-13 173 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/' * 
相關問題