DOS批處理下格式化日期字串的多種方法 詳解

2021-06-21 15:15:52 字數 2533 閱讀 7005

在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 www.jb51.net

表示取從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=*** - 指分隔符集。這個替換了空格和跳格鍵的//指定分割的字元列入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 www.jb51.net

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:\shared\datescript.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會依賴於日期時間的格式。僅此而已。

詳細出處參考:

再談DOS批處理下格式化日期字串的方法 詳解

相信很多人會用到將日期時間格式化成自己想要的字串,在windows下使用這種批處理,有時候感覺很無奈,這裡作一下簡單的總結吧,沒什麼技術含量。權作是筆記,以免將來忘掉了。在linux下,簡單的一句話 date y m d h m s 就可以得到你要的輸出 20120331 064219 可是在win...

dos下格式化磁碟

格式化 分割槽磁碟可用eqmagic pe等工具。當沒有這些工具時,可用dos下的命令格式化。但是dos下的格式化會比較慢一點。其實也可用滑鼠右擊選擇格式化方式實現.dos下的格式化磁碟命令 format e fs fat32 將e盤轉換成fat32格式。將fat32改為ntfs是將e盤轉換為ntf...

Linux下格式化輸出字串

格式 printf 033 字背景顏色 字型顏色m字串 033 0m printf 033 41 32m字型背景是紅色,字是綠色 033 0m n 41是字背景顏色,32是字型的顏色,字型背景是紅色,字是綠色是字串.後面的 033 0m是控制碼.顏色 quote 字背景顏色範圍 40 49 字顏色 ...