Batch file 试图理解此代码(批处理,CMD)

Batch file 试图理解此代码(批处理,CMD),batch-file,cmd,Batch File,Cmd,非常新的批处理,有人可以在这里解释一些事情: setlocal enabledelayedexpansion在这个特定实例中做什么 usebackq做什么?(我试过查这个,但不太明白) 变量%%g是如何初始化的,它是全局的还是局部的 谢谢你抽出时间 延迟扩展将导致变量在执行时而不是在分析时扩展。 下面的代码似乎是第二秒的回声,但它会打印第一秒的回声 @echo off setlocal enabledelayedexpansion ::just a sample adapter here

非常新的批处理,有人可以在这里解释一些事情:

  • setlocal enabledelayedexpansion在这个特定实例中做什么
  • usebackq做什么?(我试过查这个,但不太明白)
  • 变量%%g是如何初始化的,它是全局的还是局部的
  • 谢谢你抽出时间

  • 延迟扩展将导致变量在执行时而不是在分析时扩展。
    下面的代码似乎是第二秒的回声,但它会打印第一秒的回声

        @echo off
    setlocal enabledelayedexpansion
    ::just a sample adapter here:
    set "adapter=Ethernet adapter Local Area Connection"
    set adapterfound=false
    echo Network Connection Test
    for /f "usebackq tokens=1-2 delims=:" %%f in (`ipconfig /all`) do 
    (
        set "item=%%f"
        if /i "!item!"=="!adapter!" 
      (
            set adapterfound=true
          )
       else if not "!item!"=="!item:IP Address=!" if "!adapterfound!"=="true" 
      (
            echo Your IP Address is: %%g
            set adapterfound=false
          )
    )
    
    资料来源:

  • usebackq
    强制for循环使用反引号(
    `dir`
    )计算其中的命令,并使用
    for
    循环的输出,而不是打开文件。这将列出带星号的文档的所有元素

     setlocal EnableDelayedExpansion
     set var=first
     set var=second & Echo %var% !var!
    
  • 他们是本地人。使用前面的示例,
    %%i
    仅在
    for
    循环中定义,无需额外初始化


  • 我仍然不明白%%g变量是如何用IP地址初始化的,它是如何工作的,我如何将它存储在全局变量中?。还有,延迟扩展的好处是什么,为什么这个人决定这样实现代码?不过,所有的解释都很好,谢谢!如果没有
    setlocal enabledelayedexpansion
    变量在循环完成之前不会有值,因为它是在
    for
    循环内部初始化的<代码>%%g是由循环的
    标记=1-2
    位创建的。该位声明了两个变量,由于您是从
    %%f
    开始的,因此具有次高ASCII值的字符是
    %%g
    。我不知道为什么要使用
    usebackq
    ;除了个人喜好之外,它没有理由存在。我仍然不知道它是如何真正得到它的价值的。首先提到的只是回音。实际上脚本无法工作,因为存在一些语法错误:
    for。。。do(
    如果…(
    )else(
    )(括号不能放在单独的行中!)我建议阅读。
    echo Documents:
    for /f "usebackq" %%i in (`dir /b "C:\Users\%username%\Documents\"`) do (
      echo * %%i
    )
    pause