批次檔寫log時出現部分中文亂碼問題

這篇的最後有提到掛排程部署ASP.NET程式,當我在寫批次檔時,發現log中部分中文出現亂碼

批次檔程式碼:

set _date=%date:~0,4%%date:~5,2%%date:~8,2%

echo start at %date% %time% > deploy_log_%_date%.log

call .\myMVCLab.deploy.cmd /T >> deploy_log_%_date%.log

echo end at %date% %time% >> deploy_log_%_date%.log

log檔出現亂碼,但玄的是第一行的中文是正常的
 

把編碼切換成utf8試試,第一行中文變成亂碼,後面反而正常了
 

看來在執行Visual Studio產生的部署指令時,編碼會從big5改成UTF-8
造成log檔前面是big5編碼,後面是UTF-8編碼的神奇景象

去網路上爬文,找到切換編碼的指令:chcp
在一開始就把編碼切換成UTF-8試試
 

chcp 65001

set _date=%date:~0,4%%date:~5,2%%date:~8,2%

echo start at %date% %time% > deploy_log_%_date%.log

call .\myMVCLab.deploy.cmd /T >> deploy_log_%_date%.log

echo end at %date% %time% >> deploy_log_%_date%.log

出現錯誤啦!
 

原來在不同編碼下,date的日期格式不同
下面可以看到同樣指令在不同編碼下顯示的格式不同
 


所以在不同的編碼下切日期字串時要小心

修改後的的批次檔

chcp 65001

set _date=%date:~3,4%%date:~8,2%%date:~11,2%

echo start at %date% %time% > deploy_log_%_date%.log

call .\myMVCLab.deploy.cmd /T >> deploy_log_%_date%.log

echo end at %date% %time% >> deploy_log_%_date%.log

最後log檔總算正常了

 

參考文章:

Widnows Command 正常顯示 Bat 檔裡面的 UTF8 中文字