Bat批處理腳本案例--0開頭字符串如何轉成數字

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 批處理腳本編寫指南

發佈了298 篇原創文章 · 獲贊 98 · 訪問量 77萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章