你在這里看到了我的現在的時間是01:15,沒錯正在做個開發,本來好好的,結果一運行,直接報錯:
這里就是時間中的獲取小時出了問題,之前23點那會已經調試通過了,過那時是沒有問題的,那么這時發生了什么?為何中間會多了一個空格?
在系統cmd中提取時間:
可以看到小時前面還是有空格,那么是編碼問題chcp 65001 改到 chcp 936 一樣還是。
最后,想到可能這里的時間是個位數?試試
for /l %i in (0,1,9) do ( if %time:~0,2%==%i echo 0%i ) 01
果然這樣就對了
還有就是,我的bat文件要可以在中文,和英文系統上提取時間,在chcp 65001 下提取的時間格式是不同的,那么如何能正確提取呢?
思路一:
cmd判斷系統的語言,
systeminfo輸出的中雖然有zh-cn 但是中英文都是一樣,排除
采用dxdiag輸出文件后有具體的語言,可是每當執行到這里時,這兩個命令都會等好一會時間,而且執行dxdiag命令后,檢測生成的文件還會提示文件不存,但其實是有輸出的。排除
思路二:
既然系統提取的時間不同那么直接根據不同來判斷,不同主要是在提取的時間有沒有/,一般正常提取后是:20181022 錯誤的是 2018/10/22
set dateTime=%date:~10,4%%date:~4,2%%date:~7,2%_%hour%%time:~3,2%%time:~6,2%%time:~9,2% echo %dateTime% |find "/" && set dateTime=%date:~3,4%%date:~8,2%%date:~11,2%_%hour%%time:~3,2%%time:~6,2%%time:~9,2%
這樣我們就可以提取正確的時格式,又可以判斷系統的語言了。
如果想要獲取系統語言:
dism /online /get-intl
cmd時間格式參考:
參考:原文:https://blog.csdn.net/jinhoward/article/details/20213213
比如在windowscmd命令行窗口執行date命令后這個環境變量的值為
那么如下的各個操作的意義如下:
%date:~0,4% 表示從左向右指針向右偏0位,然后從指針偏移到的位置開始提取4位字符,結果是2014(年的值)
%date:~5,2% 表示指針從左向右偏移5位,然后從偏移處開始提取2位字符,結果是03(月的值)
%date:~8,2% 表示指針從左向右偏移8位,然后從偏移處開始提取2位字符,結果是01(日的值)
%date:~5% 表示指針從左向右偏移5位,然后提取所有的值
%date:~-5% 表示指針反方向偏移,從最右端開始,偏移5位,然后從指針處提取左邊的所有數值。
注意:“2014-03-01 星期六”是個字符串,在計算機里指針是從0開始計數的,所以這串字符的指針意義上的第5位是0,月份的0,取兩位剛好是03.
同理,比如當前系統的time變量的值如下:
那么如下的各個操作的意義如下:
%time:~0,2% 表示從左向右指針向右偏0位,然后從指針偏移到的位置開始提取2位字符,結果是小時字段數值
%time:~3,2% 表示指針從左向右偏移3位,然后從偏移處開始提取2位字符,結果是分鍾字段數值
%time:~6,2% 表示指針從左向右偏移6位,然后從偏移處開始提取2位字符,結果是秒字段數值
實戰操作:
md d:\%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%