再談DOS批處理下格式化日期字符串的多種方法(詳解)
更新時(shí)間:2012年06月07日 21:28:01 作者:
相信很多人會(huì)用到將日期時(shí)間格式化成自己想要的字符串,在windows下使用這種批處理,有時(shí)候感覺(jué)很無(wú)奈,這里作一下簡(jiǎn)單的總結(jié)吧,沒(méi)什么技術(shù)含量。權(quán)作是筆記,以免將來(lái)忘掉了
在Linux下,簡(jiǎn)單的一句話:date '+%Y%m%d-%H%M%S'就可以得到你要的輸出:20120331-064219
可是在windows下,要想得到這個(gè),還是需要費(fèi)點(diǎn)功夫的。
1. 直接用字符串格式化輸出
比如,如果你的機(jī)器上時(shí)間的輸出是這樣子的:
c:\>echo %date%-%time%
2012-03-31 星期六- 6:44:02.50
那么,要想得到輸出20120331- 64402,可以這樣截取字符串:
c:\>echo %date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%%time:~6,2%
20120331- 65406 www.dbjr.com.cn
表示取從0位置開(kāi)始4個(gè)字符等等。這個(gè)方法不能截?cái)嗫崭?。比較惱火
2.用for語(yǔ)句分?jǐn)嘟厝。坪鹾命c(diǎn)
先看看for的用法:
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
optinos
eol=c - 指一個(gè)行注釋字符的結(jié)尾(就一個(gè))//要忽略以什么字符開(kāi)頭的行
skip=n - 指在文件開(kāi)始時(shí)忽略的行數(shù)。
delims=xxx - 指分隔符集。這個(gè)替換了空格和跳格鍵的//指定分割的字符列入delims=;:.使用了";",":","."做分隔
默認(rèn)分隔符集。
tokens=x,y,m-n - 指每行的哪一個(gè)符號(hào)被傳遞到每個(gè)迭代
的 for 本身。這會(huì)導(dǎo)致額外變量名稱(chēng)的分配。m-n
格式為一個(gè)范圍。通過(guò) nth 符號(hào)指定 mth。如果
符號(hào)字符串中的最后一個(gè)字符星號(hào),
那么額外的變量將在最后一個(gè)符號(hào)解析之后
分配并接受行的保留文本。
usebackq - 指定新語(yǔ)法已在下類(lèi)情況中使用:
在作為命令執(zhí)行一個(gè)后引號(hào)的字符串并且一個(gè)單
引號(hào)字符為文字字符串命令并允許在 filenameset
中使用雙引號(hào)擴(kuò)起文件名稱(chēng)。
參照這個(gè)用法,我們可以對(duì)日期字符串進(jìn)行格式化輸出:
因?yàn)槿掌诮Y(jié)果是:2012-03-31 星期六
因?yàn)榉指糇址?-'還有空格' ',所以取3段出來(lái),如:
c:\>for /f "tokens=1-3 delims=- " %1 in ("%date%") do @echo %1%2%3
20120331 www.dbjr.com.cn
再看時(shí)間:
c:\>echo %time%
6:59:20.38
c:\>for /f "tokens=1-3 delims=.: " %1 in ("%time%") do @echo %1%2%3
65939
兩者一結(jié)合起來(lái)可以這樣用:
c:\>for /f "tokens=1-3 delims=- " %1 in ("%date%") do set ttt=%1%2%3
c:\>set ttt=20120331
c:\>for /f "tokens=1-3 delims=.: " %1 in ("%time%") do set ttt=%ttt%-%1%2%3
c:\>set ttt=20120331-70131
寫(xiě)成批處理,就變成這樣(goodtime.bat):
for /f "tokens=1-3 delims=- " %%1 in ("%date%") do set ttt=%%1%%2%%3
for /f "tokens=1-3 delims=.: " %%1 in ("%time%") do set ttt=%ttt%-%%1%%2%%3
echo goodtime=%ttt%
這種方法比較靈活。
3.還有一種,是使用VBScript來(lái)定制輸出
wscript.echo year(date) & right( "0" & month(date),2) & right( "0" & day(date),2) & "-" & right( "0" & hour(time),2) & right( "0" & minute(time),2)
結(jié)果如下,還是比較有意思的
c:\>cscript /nologo c:\shared\datescript.vbs
20120331-0711
當(dāng)然這樣還是不太理想,可以寫(xiě)個(gè)批處理,把結(jié)果弄到環(huán)境變量當(dāng)中:
mydate2.bat,內(nèi)容如下:
@echo off
cscript /nologo datescript.vbs >> tmp.txt
for /f "tokens=*" %%1 in (tmp.txt) do set goodtime=%%1
echo goodtime=%goodtime%
總結(jié)起來(lái),第3種方法最復(fù)雜,目前還不能斷定是否在所有windows平臺(tái)都能正確運(yùn)行,但是結(jié)果應(yīng)該是固定的。不隨著date,time格式變動(dòng)而變動(dòng)。但是1和2會(huì)依賴于日期時(shí)間的格式。僅此而已。
還是linux下比較固定。
本文來(lái)自于iihero實(shí)驗(yàn)室
可是在windows下,要想得到這個(gè),還是需要費(fèi)點(diǎn)功夫的。
1. 直接用字符串格式化輸出
比如,如果你的機(jī)器上時(shí)間的輸出是這樣子的:
c:\>echo %date%-%time%
2012-03-31 星期六- 6:44:02.50
那么,要想得到輸出20120331- 64402,可以這樣截取字符串:
c:\>echo %date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%%time:~6,2%
20120331- 65406 www.dbjr.com.cn
表示取從0位置開(kāi)始4個(gè)字符等等。這個(gè)方法不能截?cái)嗫崭?。比較惱火
2.用for語(yǔ)句分?jǐn)嘟厝。坪鹾命c(diǎn)
先看看for的用法:
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
optinos
eol=c - 指一個(gè)行注釋字符的結(jié)尾(就一個(gè))//要忽略以什么字符開(kāi)頭的行
skip=n - 指在文件開(kāi)始時(shí)忽略的行數(shù)。
delims=xxx - 指分隔符集。這個(gè)替換了空格和跳格鍵的//指定分割的字符列入delims=;:.使用了";",":","."做分隔
默認(rèn)分隔符集。
tokens=x,y,m-n - 指每行的哪一個(gè)符號(hào)被傳遞到每個(gè)迭代
的 for 本身。這會(huì)導(dǎo)致額外變量名稱(chēng)的分配。m-n
格式為一個(gè)范圍。通過(guò) nth 符號(hào)指定 mth。如果
符號(hào)字符串中的最后一個(gè)字符星號(hào),
那么額外的變量將在最后一個(gè)符號(hào)解析之后
分配并接受行的保留文本。
usebackq - 指定新語(yǔ)法已在下類(lèi)情況中使用:
在作為命令執(zhí)行一個(gè)后引號(hào)的字符串并且一個(gè)單
引號(hào)字符為文字字符串命令并允許在 filenameset
中使用雙引號(hào)擴(kuò)起文件名稱(chēng)。
參照這個(gè)用法,我們可以對(duì)日期字符串進(jìn)行格式化輸出:
因?yàn)槿掌诮Y(jié)果是:2012-03-31 星期六
因?yàn)榉指糇址?-'還有空格' ',所以取3段出來(lái),如:
c:\>for /f "tokens=1-3 delims=- " %1 in ("%date%") do @echo %1%2%3
20120331 www.dbjr.com.cn
再看時(shí)間:
c:\>echo %time%
6:59:20.38
c:\>for /f "tokens=1-3 delims=.: " %1 in ("%time%") do @echo %1%2%3
65939
兩者一結(jié)合起來(lái)可以這樣用:
c:\>for /f "tokens=1-3 delims=- " %1 in ("%date%") do set ttt=%1%2%3
c:\>set ttt=20120331
c:\>for /f "tokens=1-3 delims=.: " %1 in ("%time%") do set ttt=%ttt%-%1%2%3
c:\>set ttt=20120331-70131
寫(xiě)成批處理,就變成這樣(goodtime.bat):
for /f "tokens=1-3 delims=- " %%1 in ("%date%") do set ttt=%%1%%2%%3
for /f "tokens=1-3 delims=.: " %%1 in ("%time%") do set ttt=%ttt%-%%1%%2%%3
echo goodtime=%ttt%
這種方法比較靈活。
3.還有一種,是使用VBScript來(lái)定制輸出
wscript.echo year(date) & right( "0" & month(date),2) & right( "0" & day(date),2) & "-" & right( "0" & hour(time),2) & right( "0" & minute(time),2)
結(jié)果如下,還是比較有意思的
c:\>cscript /nologo c:\shared\datescript.vbs
20120331-0711
當(dāng)然這樣還是不太理想,可以寫(xiě)個(gè)批處理,把結(jié)果弄到環(huán)境變量當(dāng)中:
mydate2.bat,內(nèi)容如下:
@echo off
cscript /nologo datescript.vbs >> tmp.txt
for /f "tokens=*" %%1 in (tmp.txt) do set goodtime=%%1
echo goodtime=%goodtime%
總結(jié)起來(lái),第3種方法最復(fù)雜,目前還不能斷定是否在所有windows平臺(tái)都能正確運(yùn)行,但是結(jié)果應(yīng)該是固定的。不隨著date,time格式變動(dòng)而變動(dòng)。但是1和2會(huì)依賴于日期時(shí)間的格式。僅此而已。
還是linux下比較固定。
本文來(lái)自于iihero實(shí)驗(yàn)室
相關(guān)文章
windows服務(wù)操作之刪除服務(wù) 批處理實(shí)現(xiàn)
用批處理實(shí)現(xiàn)的刪除服務(wù)器的方法,其實(shí)就是利用了批處理下的sc命令。2009-03-03超簡(jiǎn)單超強(qiáng)悍的清理C盤(pán)垃圾文件方法
教大家自己寫(xiě)個(gè)程序,這個(gè)程序是自動(dòng)清理電腦里的垃圾而不會(huì)破壞系統(tǒng),比很多軟件都好哦2007-04-04ftp自動(dòng)下載文件腳本分享(ftp命令下載文件)
這篇文章主要介紹了ftp自動(dòng)下載文件腳本(ftp命令下載文件),需要的朋友可以參考下2014-03-03使用批處理命令設(shè)置windows系統(tǒng)的ip地址和dns附圖
這篇文章主要介紹了如何使用批處理命令設(shè)置windows系統(tǒng)的ip地址和dns,需要的朋友可以參考下2014-06-06phpsh hpcli開(kāi)發(fā)的終極方案(php版本切換的 批處理)
最近用php代替vbs腳本,做些小工具的開(kāi)發(fā),了方便測(cè)試不同php版本的兼容,專(zhuān)門(mén)寫(xiě)了一個(gè) php版本切換的 批處理 phpsh.cmd,支持安裝到系統(tǒng)、卸載等功能,還支持多個(gè)php版本的任意切換需要先安裝phpStudy2020-08-08WinXP自動(dòng)開(kāi)機(jī)登陸WoW bat實(shí)現(xiàn)
WinXP自動(dòng)開(kāi)機(jī)登陸WoW bat實(shí)現(xiàn)...2006-11-11