發表文章

目前顯示的是有「DOS」標籤的文章

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的參數就是表示...

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

最近在用DOS的batch指令檔來批次編譯專案。執行程式時如果有錯誤大部份都會傳回非零值的錯誤代碼,要取用這個錯誤代碼的話,在DOS Batch中可以用如下的指令: IF %ERRORLEVEL% 1 GOTO xxxx 或是 IF %ERRORLEVEL% NEQ 0 GOTO xxxx 使用上述的方式就可以來控制執行的流程。只是除了控制執行的流程外,我們還希望能將一些資訊記錄下來。在DOS的Batch指令檔中,可以用ECHO > file.txt的方式來記錄資訊。 例如: @ECHO Build Failed > log.txt 上面的指令中,@ECHO是說不要將這段顯示在DOS命令列視窗中。並且將訊息"Build Failed"寫入到log.txt檔案中。不過,其中使用的是「>」,它的作用是會覆寫檔案的內容。如果想要將文字附加到log檔中的話,可以改用「>>」。