主頁 > 知識庫 > 再談DOS批處理下格式化日期字符串的三種方法(詳解)

再談DOS批處理下格式化日期字符串的三種方法(詳解)

熱門標(biāo)簽:福建防封電銷卡辦理套餐 征服者博物館地圖標(biāo)注點(diǎn) 滄州外呼增值業(yè)務(wù)線路解決方案 江蘇手機(jī)外呼系統(tǒng)供應(yīng)商 沙依巴克工廠地圖標(biāo)注 南京機(jī)器人外呼系統(tǒng)多少錢 地圖標(biāo)注顯示小區(qū) 江蘇辦理400電話是免費(fèi)的嗎 紹興400電話怎么辦理

談到日期字符串的輸出,真是讓人煩。

在Linux下,簡單的一句話:date '+%Y%m%d-%H%M%S'就可以得到你要的輸出:20120331-064219
可是在windows下,要想得到這個,還是需要費(fèi)點(diǎn)功夫的。

1. 直接用字符串格式化輸出

比如,如果你的機(jī)器上時間的輸出是這樣子的:
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
表示取從0位置開始4個字符等等。這個方法不能截?cái)嗫崭?。比較惱火

2.用for語句分?jǐn)嘟厝?,似乎好點(diǎn)

先看看for的用法:

復(fù)制代碼 代碼如下:

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           - 指一個行注釋字符的結(jié)尾(就一個)//要忽略以什么字符開頭的行
skip=n          - 指在文件開始時忽略的行數(shù)。
delims=xxx      - 指分隔符集。這個替換了空格和跳格鍵的//指定分割的字符列入delims=;:.使用了";",":","."做分隔
                  默認(rèn)分隔符集。
tokens=x,y,m-n  - 指每行的哪一個符號被傳遞到每個迭代
                  的 for 本身。這會導(dǎo)致額外變量名稱的分配。m-n
                  格式為一個范圍。通過 nth 符號指定 mth。如果
                  符號字符串中的最后一個字符星號,
                  那么額外的變量將在最后一個符號解析之后
                  分配并接受行的保留文本。
usebackq        - 指定新語法已在下類情況中使用:
                  在作為命令執(zhí)行一個后引號的字符串并且一個單
                  引號字符為文字字符串命令并允許在 filenameset
                  中使用雙引號擴(kuò)起文件名稱。
參照這個用法,我們可以對日期字符串進(jìn)行格式化輸出:
因?yàn)槿掌诮Y(jié)果是:2012-03-31 星期六
因?yàn)榉指糇址?-'還有空格' ',所以取3段出來,如:
c:\&;for /f "tokens=1-3 delims=- " %1 in ("%date%") do @echo %1%2%3
20120331
再看時間:
c:\&;echo %time%
6:59:20.38
c:\&;for /f "tokens=1-3 delims=.: " %1 in ("%time%") do @echo %1%2%3
65939
兩者一結(jié)合起來可以這樣用:

復(fù)制代碼 代碼如下:

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

寫成批處理,就變成這樣(goodtime.bat):

復(fù)制代碼 代碼如下:

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來定制輸出

復(fù)制代碼 代碼如下:

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é)果如下,還是比較有意思的

復(fù)制代碼 代碼如下:

c:\&;cscript /nologo c:\shared\datescript.vbs
20120331-0711
當(dāng)然這樣還是不太理想,可以寫個批處理,把結(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é)起來,第3種方法最復(fù)雜,目前還不能斷定是否在所有windows平臺都能正確運(yùn)行,但是結(jié)果應(yīng)該是固定的。不隨著date,time格式變動而變動。但是1和2會依賴于日期時間的格式。僅此而已。
還是linux下比較固定。

標(biāo)簽:湘西 烏魯木齊 小程序 吳忠 宜賓 巴中 陽泉 香港

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《再談DOS批處理下格式化日期字符串的三種方法(詳解)》,本文關(guān)鍵詞  再談,DOS,批處理,下,格式化,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《再談DOS批處理下格式化日期字符串的三種方法(詳解)》相關(guān)的同類信息!
  • 本頁收集關(guān)于再談DOS批處理下格式化日期字符串的三種方法(詳解)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章