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
  • 相关阅读:
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    OA办公系统 Springboot Activiti6 工作流 集成代码生成器 vue.js 前后分离 跨域
    java企业官网源码 自适应响应式 freemarker 静态引擎 SSM 框架
    java OA办公系统源码 Springboot Activiti工作流 vue.js 前后分离 集成代码生成器
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    java 视频播放 弹幕技术 视频弹幕 视频截图 springmvc mybatis SSM
    最后阶段总结
    第二阶段学习总结
    第一阶段学习总结
  • 原文地址:https://www.cnblogs.com/xiaostudy/p/11656690.html
Copyright © 2011-2022 走看看