我的家園

          我的家園
          相信很多人會(huì)用到將日期時(shí)間格式化成自己想要的字符串,在windows下使用這種批處理,有時(shí)候感覺很無奈,這里作一下簡(jiǎn)單的總結(jié)吧,沒什么技術(shù)含量。權(quán)作是筆記,以免將來忘掉了。

          在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

          表示取從0位置開始4個(gè)字符等等。這個(gè)方法不能截?cái)嗫崭?。比較惱火

          2.用for語句分?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è))//要忽略以什么字符開頭的行
          skip=n          - 指在文件開始時(shí)忽略的行數(shù)。
          delims=xxx      - 指分隔符集。這個(gè)替換了空格和跳格鍵的//指定分割的字符列入delims=;:.使用了";",":","."做分隔
                            默認(rèn)分隔符集。
          tokens=x,y,m-n  - 指每行的哪一個(gè)符號(hào)被傳遞到每個(gè)迭代
                            的 for 本身。這會(huì)導(dǎo)致額外變量名稱的分配。m-n
                            格式為一個(gè)范圍。通過 nth 符號(hào)指定 mth。如果
                            符號(hào)字符串中的最后一個(gè)字符星號(hào),
                            那么額外的變量將在最后一個(gè)符號(hào)解析之后
                            分配并接受行的保留文本。
          usebackq        - 指定新語法已在下類情況中使用:
                            在作為命令執(zhí)行一個(gè)后引號(hào)的字符串并且一個(gè)單
                            引號(hào)字符為文字字符串命令并允許在 filenameset
                            中使用雙引號(hào)擴(kuò)起文件名稱。

          參照這個(gè)用法,我們可以對(duì)日期字符串進(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

          再看時(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é)合起來可以這樣用:

           

          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) 

           

           結(jié)果如下,還是比較有意思的

          c:\>cscript /nologo c:\shared\datescript.vbs
          20120331-0711

          當(dāng)然這樣還是不太理想,可以寫個(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é)起來,第3種方法最復(fù)雜,目前還不能斷定是否在所有windows平臺(tái)都能正確運(yùn)行,但是結(jié)果應(yīng)該是固定的。不隨著date,time格式變動(dòng)而變動(dòng)。但是1和2會(huì)依賴于日期時(shí)間的格式。僅此而已。

          還是linux下比較固定。

          本文同步傳到站點(diǎn):http://www.sql9.com/?id=86



          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宁南县| 临汾市| 北宁市| 昌平区| 泗阳县| 本溪市| 昭苏县| 龙川县| 吉安市| 临泽县| 东宁县| 缙云县| 双峰县| 资源县| 贵州省| 得荣县| 民乐县| 富平县| 马尔康县| 大邑县| 偃师市| 金山区| 贡山| 玉溪市| 社旗县| 古交市| 荔浦县| 秦皇岛市| 乳源| 开封县| 工布江达县| 特克斯县| 荣成市| 出国| 上饶市| 渭源县| 二连浩特市| 梁山县| 茶陵县| 城固县| 镇康县|