【问题标题】:Batch different way to access array批量访问数组的不同方式
【发布时间】:2020-01-27 19:15:46
【问题描述】:

这是我的脚本:

@echo off
setlocal EnableDelayedExpansion
set "memuc=d:\file.exe"

set array[0]=foo
set array[1]=bar

set x=0


:SymLoop
if defined array[!x!] (
    call "!memuc!" start -n !!array[%x%]!!

    set /A x=!x! + 1
    GOTO :SymLoop
)

endlocal
  1. 为什么不能用!array[%x%]! 替换array[!x!] 行?我想在访问delayedExpansion 变量时必须使用!
  2. 为什么我必须使用%x% 而不是!x!?。同样,我认为! 应该是访问x 变量的必要条件
  3. 为什么我必须在这里使用两个! !!array[%x%]!!

【问题讨论】:

    标签: batch-file command-line


    【解决方案1】:

    我认为你理解错了。 ! 表示变量的值将尽可能晚地扩展

    @echo off
    SETLOCAL EnableDelayedExpansion
    set "_var=stackoverflow"
    set "_var=rules" & echo "%_var% !_var!"
    

    由于延迟扩展,这将打印"stackoverflow rules"

    现在回答你的问题:

    附录1。原因是if defined。如果您想将实际变量放在那里,您将使用例如你的array[0] 这就是你有array[!x!] 而不是!array[%x%]! 的原因。

    Addum 2. 您必须使用%x% 来立即扩展,因为您希望拥有array[0]array[1]。如果您将其写为!x!,那么您将进行搜索,如果写为%array[!x!]% 则为array[!x!]

    附录 3。 双感叹号 (!!) 之所以存在,是因为 call 引入了更多扩展。所以首先你有%x%的立即扩展,然后你有array[0]的扩展,然后是call的扩展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      相关资源
      最近更新 更多