三種DOS批處理下格式化日期文字方法

來源:互聯網
上載者:User

三種DOS批處理下格式化日期文字方法

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

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

 

在Linux下,簡單的一句話:date '+%Y%m%d-%H%M%S'就可以得到你要的輸出:20120331-064219 

可是在windows下,要想得到這個,還是需要費點功夫的。 

 

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

 

比如,如果你的機器上時間的輸出是這樣子的: 

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個字元等等。這個方法不能截斷空格。比較惱火 

 

2.用for語句分斷截取,似乎好點 

 

先看看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           - 指一個行注釋字元的結尾(就一個)//要忽略以什麼字元開頭的行 

skip=n          - 指在檔案開始時忽略的行數。 

delims=xxx      - 指分隔字元集。這個替換了空格和跳格鍵的//指定分割的字元列入delims=;:.使用了";",":","."做分隔 

                  預設分隔符號集。 

tokens=x,y,m-n  - 指每行的哪一個符號被傳遞到每個迭代 

                  的 for 本身。這會導致額外變數名稱的分配。m-n 

                  格式為一個範圍。通過 nth 符號指定 mth。如果 

                  符號字串中的最後一個字元星號, 

                  那麼額外的變數將在最後一個符號解析之後 

                  分配並接受行的保留文本。 

usebackq        - 指定新文法已在下類情況中使用: 

                  在作為命令執行一個後引號的字串並且一個單 

                  引號字元為文字字串命令並允許在 filenameset 

                  中使用雙引號擴起檔案名稱。 

參照這個用法,我們可以對日期文字進行格式化輸出: 

因為日期結果是:2012-03-31 星期六 

因為分隔字元是'-'還有空格' ',所以取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 

兩者一結合起來可以這樣用:

 

代碼如下:

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

 

 

代碼如下:

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

 

 

代碼如下:

wscript.echo   year(date)   &   right( "0"   &   month(date),2)   &   right( "0"   &   day(date),2)   &   "-" & right( "0"   &   hour(time),2)   &   right( "0"   &   minute(time),2) 

 

 

結果如下,還是比較有意思的

 

 

代碼如下:

c:>cscript /nologo c:shareddatescript.vbs

20120331-0711

當然這樣還是不太理想,可以寫個批處理,把結果弄到環境變數當中:

mydate2.bat,內容如下:

@echo off

cscript /nologo datescript.vbs >> tmp.txt

for /f "tokens=*" %%1 in (tmp.txt) do set goodtime=%%1

echo goodtime=%goodtime%

 

 

總結起來,第3種方法最複雜,目前還不能斷定是否在所有windows平台都能正確運行,但是結果應該是固定的。不隨著date,time格式變動而變動。但是1和2會依賴於日期時間的格式。僅此而已。 

還是linux下比較固定。 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.