试图使批量匹配我当前的IP到一个集合IP

试图使批量匹配我当前的IP到一个集合IP

问题描述:

我一直在尝试做一个ipconfig并获取IP的批处理。然后它将ip匹配到一个值集。显示ip是否匹配。我发现的最接近的事情是在另一个帖子里面对试图使批量匹配我当前的IP到一个集合IP

@echo off 

rem --- complete adapter name to find without the ending ":" --- 
set adapter=Wireless LAN adapter Wireless Network Connection 

rem --- token under an adapter to extract IP address from --- 
set IPAddrToken=IPv4 Address 

rem --- token under an adapter to extract IP address from --- 
set matchipaddress=192.168.1.101 

setlocal enableextensions enabledelayedexpansion 
set adapterfound=false 
set emptylines=0 
set ipaddress= 

for /f "usebackq tokens=1-3 delims=:" %%e in (`ipconfig ^| findstr /n "^"`) do (

    set "item=%%f" 

    if /i "!item!"=="!adapter!" (
     set adapterfound=true 
     set emptylines=0 
    ) else if not "!item!"=="" if not "!item!"=="!item:%IPAddrToken%=!" if "!adapterfound!"=="true" (
     @rem "!item:%IPAddrToken%=!" --> item with "IPv4 Address" removed 
     set ipaddress=%%g 
     goto :result 
    ) 
    if "%%f-%%g-!adapterfound!-!emptylines!"=="--true-1" (
     @rem 2nd blank line after adapter found 
     goto :result 
    ) 
    if "%%f-%%g-!adapterfound!-!emptylines!"=="--true-0" (
     @rem 1st blank line after adapter found 
     set emptylines=1 
    ) 
) 

endlocal 

:result 
    echo %adapter% 
    echo. 
    if not "%ipaddress%"=="" (
     echo %IPAddrToken% =%ipaddress% 
    ) else (
     if "%adapterfound%"=="true" (
      echo %IPAddrToken% Not Found 
     ) else (
      echo Adapter Not Found 
     ) 
    ) 

ECHO.  

PAUSE 

肯定,这可能会做多一点,但寻找到一个特定的适配器,看是否我有一个IP或没有,如果我有一个IP确保其设置ip。

谢谢你提前!

+0

我意识到我可能需要而不是IP检查检查网关IP,看看它的变化,而不是IP。 此外,因为我有1个USB适配器,内部WiFi适配器和以太网端口,我很想有每一个检查特定的IP。 原因是因为我有多个网络,学校,工作,家庭和移动,我需要程序启动或杀死基于适配器和网关(因为IP似乎没有查找公开),并基于该适配器我可能使用vpn。这就是为什么我正在寻找适配器中网关ips的变化。 – droopie 2014-12-02 22:39:45

这可以用一个单线来完成。

ipconfig | find "192.168.1.101" >NUL && echo Match! || echo No match. 

&&运营商在评估的find命令的成功返回。但是,如果find失败(如果不匹配,则返回true),则||之后的内容将被替换。这基本上是以下的简写形式:

ipconfig | find "192.168.1.101" >NUL 
if NOT ERRORLEVEL 1 (
    echo Match! 
) else (
    echo No match. 
) 

使用find的返回码(其%ERRORLEVEL%)是用于确定是否在另一个字符串中存在一个字符串非常方便。

有关条件执行的更多信息,请参阅read this


编辑: OP评论说,“我有1个USB WiFi适配器,内置WiFi适配器和以太网端口,我很想有针对特定IP每一个检查......”这是一个基本你可以用它来构建你的项目。使用类似echo !Description! | find "wlan card identifier"的条件执行以上演示,以采取您希望的任何操作。快乐的编码! :)

@echo off 
setlocal enabledelayedexpansion 

set "home=10.0.0" 
set "school=192.168" 
set "work=172.16" 

for /f "skip=1 tokens=1* delims={}" %%I in ('wmic nicconfig where "ipenabled=true" get DefaultIPGateway^, Description') do (
    set "IP=%%~I" 

    rem :: make sure !IP! contains numbers before continuing 
    echo !IP! | findstr "[0-9]" >NUL && (

     rem :: trim left from %%J 
     for /f "tokens=* delims= " %%x in ("%%~J") do set Description=%%x 

     if "!IP:%home%=!" neq "!IP!" (
      echo Connected at home on !Description! 
     ) else if "!IP:%school%=!" neq "!IP!" (
      echo Connected at school on !Description! 
     ) else if "!IP:%work%=!" neq "!IP!" (
      echo Connected at work on !Description! 
     ) else (
      echo Unknown connection on !Description! 
     ) 
    ) 
) 
+0

这很好,但我如何启用它的特定适配器?我有3个适配器,我想用特定的IP来杀死进程的某些适配器 – droopie 2014-12-02 22:12:50

+0

您可以使用'wmic nicconfig'而不是'ipconfig'。我会在下次看电脑时发表一个例子,除非有人打我。 – rojo 2014-12-02 22:22:00

+0

我刚刚意识到,我可能需要而不是IP检查是检查网关IP,看看它的变化,而不是IP。 此外,因为我有1个USB适配器,内部WiFi适配器和以太网端口,我很想有每一个检查特定的IP。 原因是因为我有多个网络,学校,工作,家庭和移动,我需要程序启动或杀死基于适配器和网关(因为IP似乎没有查找公开),并基于该适配器我可能使用vpn。这就是为什么我正在寻找适配器中网关ips的变化。 – droopie 2014-12-02 22:37:56