zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    Java实现 LeetCode 807 保持城市天际线 (暴力)
    ASP.NET关于书籍详情和删除的Demo(HttpHandler进行页面静态化[自动生成html网页]+Entity Framework通过类创建数据库+EF删查)
    ASP.NET关于书籍详情和删除的Demo(HttpHandler进行页面静态化[自动生成html网页]+Entity Framework通过类创建数据库+EF删查)...
    ASP.NET关于书籍详情和删除的Demo(HttpHandler进行页面静态化[自动生成html网页]+Entity Framework通过类创建数据库+EF删查)...
    Java实现 LeetCode 806 写字符串需要的行数 (暴力模拟)
    Java实现 LeetCode 806 写字符串需要的行数 (暴力模拟)
    Java实现 LeetCode 806 写字符串需要的行数 (暴力模拟)
    Java实现 LeetCode 805 数组的均值分割 (DFS+分析题)
    .net web api返回结果为json
    httpclient与webapi
  • 原文地址:https://www.cnblogs.com/xiaostudy/p/11656690.html
Copyright © 2011-2022 走看看