【bat】實現數組,for循環取數據


1、數組對象

 

@echo off

set objLength=2

set obj[0].name=test1
set obj[0].password=1234
set obj[1].name=test2
set obj[1].password=9876

set objIndex=0

:loopStart
if %objIndex% equ %objLength% goto end

set objCurrent.name=0
set objCurrent.password=0

for /f "usebackq delims==. tokens=1-3" %%i in (`set obj[%objIndex%]`) do (
    set objCurrent.%%j=%%k
    echo 第一個=%%i
    echo 第二個=%%j
    echo 第三個=%%k
)

echo name=%objCurrent.name%
echo password=%objCurrent.password%


set /a objIndex=%objIndex% + 1

goto loopStart

:end

pause

 

 

 

 

解析:

@echo off
::規定數組長度
set objLength=2
::給數組設值
set obj[0].name=test1
set obj[0].password=1234
set obj[1].name=test2
set obj[1].password=9876
::初始索引
set objIndex=0
::循環
:loopStart
::判斷索引值是否大於數組長度,大於的話跳到結束,不大於的話繼續循環
if %objIndex% equ %objLength% goto end

::初始化變量
set objCurrent.name=0
set objCurrent.password=0
::這個循環是數組對象處理循環,就是處理單個對象。/f是參數格式 usebackq聲明路徑有空格
::delims==.是以=和.切割字符串,tokens=1-3是取切割后字符串的前1到3個,%%i表示第一個字符串【比如:obj[0]】,%%j表示第二個字符串【比如:password】,%%k表示第三個字符串【比如:1234】,`set obj[%objIndex%]`和/f取到字符串【比如:obj[0].password=1234】
for /f "usebackq delims==. tokens=1-3" %%i in (`set obj[%objIndex%]`) do (
::  賦值變量
    set objCurrent.%%j=%%k
    echo 第一個=%%i
    echo 第二個=%%j
    echo 第三個=%%k
)

echo name=%objCurrent.name%
echo password=%objCurrent.password%

::索引+1
set /a objIndex=%objIndex% + 1
::繼續循環
goto loopStart

:end

pause

 

 

2、簡單數組

@echo off
::規定數組長度
set objLength=3
::給數組設值
set obj[0]=test1
set obj[1]=test2
set obj[2]=9876
::初始索引
set objIndex=0
::循環
:loopStart
::判斷索引值是否大於數組長度,大於的話跳到結束,不大於的話繼續循環
if %objIndex% equ %objLength% goto end

::初始化變量
set objCurrent=0
::這個循環是數組對象處理循環,就是處理單個對象。/f是參數格式 usebackq聲明路徑有空格
::delims==是以=切割字符串,tokens=1-3是取切割后字符串的前1到3個,%%i表示第一個字符串【比如:obj[0]】,%%j表示第二個字符串【比如:test2】,`set obj[%objIndex%]`和/f取到字符串【比如:obj[0]=test2】
for /f "usebackq delims== tokens=1-2" %%i in (`set obj[%objIndex%]`) do (
::  賦值變量
    set objCurrent=%%j
    echo 第一個=%%i
    echo 第二個=%%j
)

echo objCurrent=%objCurrent%

::索引+1
set /a objIndex=%objIndex% + 1
::繼續循環
goto loopStart

:end

pause

 

 

簡化版

@echo off & setlocal EnableDelayedExpansion

set obj[0]=test1
set obj[1]=test2
set obj[2]=9876
set obj[3]=wwww

set objCurrent=0

for /l %%a in (0,1,3) do (
    for /f "usebackq delims== tokens=1-2" %%i in (`set obj[%%a]`) do (
        echo 第一個=%%i
        echo 第二個=%%j
        set objCurrent=%%j
    )
    echo objCurrent=!objCurrent!

)

pause

 

 

@echo off & setlocal EnableDelayedExpansion

set obj[0]=test1
set obj[1]=test2
set obj[2]=9876
set obj[3]=wwww

set objCurrent=0

for %%a in (0,1,2,3) do (
    for /f "usebackq delims== tokens=1-2" %%i in (`set obj[%%a]`) do (
        echo 第一個=%%i
        echo 第二個=%%j
        set objCurrent=%%j
    )
    echo objCurrent=!objCurrent!

)

pause

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM