Bat批處理指令碼案例 0開頭字串如何轉成數字

2021-10-02 23:26:58 字數 1231 閱讀 8501

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...