0開頭字串直接進行表示式算術運算時,指令碼會預設把0開頭的字串轉換為8進製數值,如下:
rem a=22,021轉成10進製為17,17+5=22
set /a num=
"021"+5
rem 會報錯,028不是有效8進製。數字常數只能是十進位制(17),十六位進製(0x11)或八進位制(021)。
set /a num=
"028"+5
類似09,028等顯然不是有效8進製數,為此0開頭的字串轉成數值需要特殊處理,如何實現呢?
1、已知位數情況
比如日期:2020-09-12 00:00:00,需要獲取月份進行一些運算:
1)可通過字串擷取得到 月份是9月:09, set mm=09
2)09 轉換成數字,因為月份就2位,所以可以加10000然後對100求模,如下:
rem 10009%100得到9
set /a m=100%mm%%%100
2、位數不確定
比如:012987623、001233445怎麼處理?
1)計算位數,知道了位數,就同已知位數情況:寫個迴圈除10,次數累加即可獲取位數
2)字串去前置0,類似高階語言的ltrim,**strzero.bat如下:
@echo off & setlocal enabledelayedexpansion
set str2=
"00987"
call :trimzero %str2%
rem 00=
>0,00987=
>987,0987=
>987
echo %result%
goto :eof
:trimzero
set i=0
set strnum=%~1
:loop
if"!strnum:~%i%,1!"
=="0"
(set /a i+=1
goto loop
)set result=
!strnum:~%i%!
if not defined result set result=0
goto :eof
**說明:
本案例涉及函式定義、呼叫,變數延時讀取等知識點,關於bat批處理指令碼開發基礎指南,可以參考:windows bat 批處理指令碼編寫指南
BAT批處理指令碼案例 計算字串長度
bat批處理指令碼沒有提供字串長度計算函式,為此需要自定義實現,本例將涉及批處理指令碼下述幾個關鍵知識點 1 call 呼叫,呼叫結果如何賦值給變數 2 字串擷取 3 goto使用 4 變數延時讀取 enabledelayedexpansion 關於bat批處理指令碼編寫指南,大家可以參考 wind...
BAT批處理指令碼
echo off 與 echo on 前者為關閉回顯,後者為開啟回顯 當不想批處理檔案中的命令一行一行在dos中顯示出來時 因為全部顯示出來的話看起來會變得很雜亂 可以使用 echo off,將其放於程式的最上方就行了。先不把回顯關閉,執行乙個小的bat檔案,為 echo off title a c...
Bat批處理指令碼
bat for迴圈 在cmd視窗中 for variable in set do command command parameters 在批處理檔案中 for variable in set do command command parameters 想知道當前目錄下都有哪些檔案嗎?請用下面的 ec...