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

2021-06-18 02:23:43 字數 2873 閱讀 5944

相信很多人會用到將日期時間格式化成自己想要的字串,在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=***      - 指分隔符集。這個替換了空格和跳格鍵的//指定分割的字元列入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:\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下格式化磁碟

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

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

在linux下,簡單的一句話 date y m d h m s 就可以得到你要的輸出 20120331 064219 可是在windows下,要想得到這個,還是需要費點功夫的。1.直接用字串格式化輸出 比如,如果你的機器上時間的輸出是這樣子的 c echo date time 2012 03 31 ...

用fmt formatDate格式化日期欄位的輸出

日曆控制項的輸出格式為 x xx xx,因為是資訊編輯頁,所以要從資料庫中取出使用者已新增的資訊輸出到文字框中,所以取出的資料格式要和日曆控制項保持一致,不然就會抱錯。我使用了標籤 使用方法如下例 nf cus calendar datatype require msg 請輸入出生日期 datest...