代码之家  ›  专栏  ›  技术社区  ›  Rhyknowscerious

Echo在我的Windows批处理脚本中工作不正常

  •  1
  • Rhyknowscerious  · 技术社区  · 8 年前

    主要问题:

    ECHO命令忽略令牌参数之前的所有字符,并将令牌参数之后的所有文本插入输出中的令牌之前:

    @ECHO OFF
    FOR /F "USEBACKQ TOKENS=2 DELIMS==" %%a IN (`
        WMIC NIC WHERE 
                "MACAddress IS NOT NULL" 
            GET 
                MACAddress 
            /FORMAT:LIST ^| 
            FINDSTR /V /R "^%"
    `) DO (
        ECHO [%%a]
        ECHO 0123456789%%a9876543210
    )
    PAUSE > NUL
    

    这是 预期

    [AA:BB:CC:11:22:33]
    0123456789AA:BB:CC:11:22:339876543210
    

    这是 真实的 输出:

    ]AA:BB:CC:11:22:33
    9876543210AA:BB:CC:11:22:33
    

    我的意图是用这个块替换上面示例中的DO()块:

    :: ...FOR LOOP STUFF...
    `) DO (
        WMIC NIC WHERE ^
            "MACAddress=%%a" ^
        GET ^
            NetConnectionID ^
        /FORMAT:LIST | FINDSTR /V /R "^$"
    
        WMIC NICCONFIG WHERE ^
            "MACAddress=%%a" ^
        GET ^
            DefaultIPGateway,^
            DNSServerSearchOrder,^
            IPAddress,^
            IPSubnet,^
            MacAddress ^
        /FORMAT:LIST | FINDSTR /V /R "^$"
    )
    

    2 回复  |  直到 8 年前
        1
  •  1
  •   Magoo    8 年前
    @ECHO OFF
    SETLOCAL ENABLEDELAYEDEXPANSION 
    FOR /F "TOKENS=2 DELIMS==" %%a IN ('
        WMIC NIC WHERE "MACAddress IS NOT NULL" GET MACAddress 
            /FORMAT:LIST 
    ') DO (
     SET "macaddr=%%a"
     SET "macaddr=!macaddr:~0,-1!"
        ECHO [!macaddr!]
        ECHO 0123456789!macaddr!9876543210
    )
    
    GOTO :EOF
    

    我找不到理由 findstr -正如发布的那样,代码根本没有给我任何输出。卸下 提供了报告的输出。

    这个 wmic 通过重定向可以观察到怪癖 wmic公司 输出到文件,并使用十六进制编辑器检查结果。解决方法是简单地机械删除分配给令牌的值的最后一个字符。

        2
  •  1
  •   Hackoo    8 年前

    我只是使用 Getmac 类似于此脚本的命令:

    @echo off
    mode 80,5 & Color 9E
    Title Get (LAN ,Public) (IP) and MAC Addresses by Hackoo 2017
    cls
    echo( & echo(
    echo   Please Wait a While ... Searching for (LAN ,Public)(IP) and MAC addresses ...
    @for /f "delims=[] tokens=2" %%a in ('ping -4 -n 1 %ComputerName% ^| findstr [') do (
       set "LAN_IP=%%a"
    )
    
    for /f "tokens=2 delims=: " %%A in (
      'nslookup myip.opendns.com. resolver1.opendns.com 2^>NUL^|find "Address:"'
    ) Do set ExtIP=%%A
    
    
    @For /f %%a in ('getmac /NH /FO Table') do  (
       @For /f %%b in ('echo %%a') do (
           If /I NOT "%%b"=="N/A" (
                Set "MY_MAC=%%b"
            )
        )
    )
        Cls
        echo(
        echo                My Private LAN IP       : %LAN_IP%
        echo                My External Public IP   : %ExtIP%
        echo                MAC Address             : %MY_MAC%
    Timeout /T 5 /NoBreak>nul & Exit