Echo在我的Windows批处理脚本

时间:2017-08-26 20:29:21

标签: windows batch-file cmd echo token

主要问题:

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 "^$"
)

如上所述,%% a之前的所有字符都被截断,%% a之后的所有字符在处理脚本之前显示在%% a之前。有人请帮忙,我在这里比喻哭。

2 个答案:

答案 0 :(得分:1)

@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的原因 - 如发布的那样,代码根本没有给我任何输出。删除findstr提供了报告的输出。

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

答案 1 :(得分:1)

我只是在这个脚本中使用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 
相关问题