【问题标题】:Batch: Array index returns blank批处理:数组索引返回空白
【发布时间】:2015-10-14 15:07:17
【问题描述】:

在这段代码中,我试图通过交替分成两列来使列表适合 WinPE 中的屏幕。但是当我将!modelsvar[%increment%]:~20! 放入回声中时,它只返回~20。奇怪,因为!modelsvar[%%D]:~20! 工作正常。我已经尝试了很多变体!和 % 但没有运气。有人知道我是否缺少特定规则吗?

我启用了setlocal enabledelayedexpansion

set modelsx=%counter%
set /a counter=0

for /l %%D in (1,2,%modelsx%) do (
set /a counter+=1
set /a increment=!counter!+1
ECHO !counter!. !modelsvar[%%D]:~20!      !increment!. !modelsvar[%increment%]:~20!
set /a counter+=1
)

【问题讨论】:

    标签: arrays batch-file for-loop


    【解决方案1】:
    for /l %%D in (1,2,%modelsx%) do (
       set /a counter+=1
       set /a increment=counter+1
       for %%X in (!increment!) do (
          ECHO !counter!. !modelsvar[%%D]:~20!      !increment!. !modelsvar[%%X]:~20!
       )
       set /a counter+=1
    )
    

    更多详情Arrays, linked lists and other data structures in cmd.exe (batch) script

    【讨论】:

    • 这行得通。谢谢你。我怀疑它与流程顺序有关,但我认为我不能在一行中从两个 for 循环中回显。
    【解决方案2】:

    您将increment 立即扩展到ECHO 内,就像%increment%,所以返回值是for 循环执行之前的值。

    这是另一种解决方法:

    set modelsx=%counter%
    set /a counter=0
    
    for /l %%D in (1,2,%modelsx%) do (
        set /a counter+=1
        set /a increment=!counter!+1
        call ECHO !counter!. !modelsvar[%%D]:~20!      !increment!. %%modelsvar[!increment!]:~20%%
        set /a counter+=1
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 2016-06-02
      • 2021-11-18
      相关资源
      最近更新 更多