试图理解这段代码(Batch,CMD)

时间:2016-12-05 19:05:14

标签: batch-file cmd

    @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
      )
)

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

  1. setlocal enabledelayedexpansion在此特定实例中做了什么?
  2. usebackq有什么作用? (我试过看了,但不太明白)
  3. 变量%% g是如何初始化的,是全局的还是本地的?
  4. 感谢您的时间!

1 个答案:

答案 0 :(得分:2)

  1. 延迟扩展会导致变量在执行时而不是在解析时扩展。
    下面的代码似乎与second second相呼应,但它会打印first second

     setlocal EnableDelayedExpansion
     set var=first
     set var=second & Echo %var% !var!
    

    来源:SS64

  2. usebackq force for循环使用反引号(`dir`)来评估其中的命令并使用for循环的输出,而不是打开文件。这将列出以星号预先记录的文档的所有元素。

    echo Documents:
    for /f "usebackq" %%i in (`dir /b "C:\Users\%username%\Documents\"`) do (
      echo * %%i
    )
    pause
    
  3. 他们是当地的。使用前面的示例,%%i仅在for循环中定义,无需其他初始化。