DOS批次檔中取得中華民國年份

開始覺得DOS的批次檔指令真是高深莫測了。

最近想完成個小需求就是要寫一個DOS Batch指令檔,去Linux主機上用FTP模式下載一些檔案下來。

這些檔案的檔名都是以日期編名的,如果是用西元年,那倒也還容易。可是這次的檔名卻是用中華民國的年份。@@

好吧,西元年算到中華民國年份,充其量用個減法減去1911年就可以得到了。但在DOS的批次檔中要如何寫啊?

首先要取得西元年的日期

在Dos命令列視窗中輸入date /t可以取得目前的日期,但格式化後取得的結果如下,它會多一個星期幾的字串。

但我們並不想要這個星期幾的字串,而且也不想要"/"。所以可以用如下的指令來取得20121003的字串:


@echo off
REM 產生日期參數
@For /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set date=%%a%%b%%c)
@echo %date%
pause

執行的結果如下:


上面DOS指令中的For的意思就是將date /t的結果,依delims(分割字元)來區隔,注意這裏設定的分割字元有兩種,一種是"/",另一種" ",是空格喔。接著它會取分割後的第一到第三個部份,這是tokens=1-3指定的。

並且所分割出來的部份是以%%a開始命名變數,所以這三個分割出來的變數名稱就是%%a、%%b及%%c。

分割完成後就執行do裏面指令的指令 set date=%%a%%b%%c。這樣就可以得到20121003的字串了。

計算民國年

有了西元年月日,接著就是要計算民國年了。前面我們得到的字串其內容為20121003,接著我們想要取得前面四碼。要如何取得前四碼呢?這又是個難題了。後來查了一下,正好看到有人提供一個方式:

set tt=%date:~0,4%

原來SET指令還有這種模式可以用來取得字串的某一部份,真是沒想到。後來就查了一下SET指令的說明,才知道真有這種方式。

不過取到了前四碼,那要如何進行數學運算呢?原來也是用SET就可以了:

SET /A ChinaYear=%Year%-1

在SET指令中加上/A的參數就是表示要用數學運算模式,如果沒加/A的話,它會當你是字串,就給你2012-1這樣的字串。

所以總結以上的程式碼,要取得目前日期的民國年的話,完整的程式碼如下:


@echo off
REM 產生日期參數
@For /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set date=%%a%%b%%c)
@echo %date%
@set tt=%date:~0,4%
@echo %tt%
@set /A ChinaYear=%tt%-1911
@echo %ChinaYear%

pause

執行的結果:

留言

這個網誌中的熱門文章

DOS Batch指令檔中如何記錄log資訊

用捷徑方式執行需帶入命令列參數的Windows Form程式

使用regular expression來match中括號(square bracket)