Batch file 批处理脚本检查是否存在外部IP

Batch file 批处理脚本检查是否存在外部IP,batch-file,networking,command-line,command-prompt,Batch File,Networking,Command Line,Command Prompt,有人能帮我吗 我正在尝试制作批次,该批次将: 得到我的ip 重置路由器 检查是否有更改 对于批处理,我使用命令promt-command for /f "skip=4 usebackq tokens=2" %%a in ('nslookup myip.opendns.com resolver1.opendns.com') do echo %%a 要获取外部IP地址,此代码仅适用于外部IP,因此您可以从以下内容开始: @echo off set "IPLog=%userprofile%\Desk

有人能帮我吗

我正在尝试制作批次,该批次将:

  • 得到我的ip
  • 重置路由器
  • 检查是否有更改
  • 对于批处理,我使用命令promt-command

    for /f "skip=4 usebackq tokens=2" %%a in ('nslookup myip.opendns.com resolver1.opendns.com') do echo %%a
    

    要获取外部IP地址,此代码仅适用于外部IP,因此您可以从以下内容开始:

    @echo off
    set "IPLog=%userprofile%\Desktop\%~n0.txt"
    Set "MyCommand=nslookup myip.opendns.com resolver1.opendns.com 2^>nul"
    for /f "skip=4 delims=: tokens=2" %%a in ('%MyCommand%') do (
        Set "MyExtIP=%%a"
    )
    Call :Trim %MyExtIP%
    echo My Extenal IP Adress is : %MyExtIP%
    echo My Extenal IP Adress is : %MyExtIP% > "%IPLog%"
    PAUSE & start "" "%IPLog%" & exit
    ::*************************************************************************************
    :Trim <String>
    set "vbsfile=%tmp%\%~n0.vbs"
    (
        echo Wscript.echo Trim("%~1"^)
    )>"%vbsfile%"
    for /f "delims=" %%a in ('Cscript /nologo "%vbsfile%"') do ( set "MyExtIP=%%a" )
    If Exist "%vbsfile%" Del "%vbsfile%"
    exit /b
    ::*************************************************************************************
    
    @echo关闭
    设置“IPLog=%userprofile%\Desktop\%~n0.txt”
    设置“MyCommand=nslookup myip.opendns.com resolver1.opendns.com 2^>nul”
    对于(“%MyCommand%”中的/f“skip=4 delims=:tokens=2”%%a do(
    设置“MyExtIP=%%a”
    )
    呼叫:修剪%MyExtIP%
    回显我的扩展IP地址是:%MyExtIP%
    回显我的扩展IP地址是:%MyExtIP%>%IPLog%
    暂停并启动“”%IPLog%”并退出
    ::*************************************************************************************
    :修剪
    设置“vbsfile=%tmp%\%~n0.vbs”
    (
    echo Wscript.echo修剪(“%1”^)
    )>%vbsfile%
    对于/f“delims=“%%a in('Cscript/nologo”%vbsfile%”)do(设置“MyExtIP=%%a”)
    如果存在“%vbsfile%”删除“%vbsfile%”
    退出/b
    ::*************************************************************************************
    
    编辑:2016年9月10日

    @echo关闭
    :Checkloop
    电话:GetIP
    电话:CheckIP
    rem goto:检查循环
    ::******************************************************************************
    :GetIP
    设置“IPLog=%userprofile%\Desktop\%~n0.txt”
    设置“MyCommand=nslookup myip.opendns.com resolver1.opendns.com 2^>nul”
    对于(“%MyCommand%”中的/f“skip=4 delims=:tokens=2”%%a Do(
    设置“MyExtIP=%%a”
    )
    呼叫:修剪%MyExtIP%
    回显我的扩展IP地址为:“%MyExtIP%”
    回显%MyExtIP%>%IPLog%
    退出/b
    ::*************************************************************************************
    :CheckIP
    如果不存在“%IPLog%”,则调用:GetIP
    rem Set/p CheckIP=“%vbsfile%”
    对于/f“delims=“%%a in('Cscript/nologo”%vbsfile%”)do(设置“MyExtIP=%%a”)
    如果存在“%vbsfile%”删除“%vbsfile%”
    退出/b
    ::*************************************************************************************
    
    这似乎只获取公共IP地址。如果ISP使用CGN,它将无法获取外部(WAN)IP地址。对于CGN,它将获得ISP的公共IP地址,这可能没有用。越来越多的ISP使用CGN(只需在网上搜索),这给最终用户带来了问题。不幸的是,似乎大多数使用CGN的ISP没有使用为CGN保留的IPv4范围(`100.64.0.0/10'),他们使用的是RFC 1918专用地址空间,这可能与客户的网络地址冲突。您好,谢谢您的回答!你现在能帮我完成这件事吗。如果我把这个代码放在某个“check_ip.bat”中,我的最后一批应该是这样的:@Echo off check_ip.bat
    :START reset_router.bat check_ip.bat If ip_previous==ip_NEW goto START else FINISH::FINISH exit
    这个代码应该放在某个“final.bat”中如何处理这个IF部分?@Jovan检查我上次的编辑,我不知道如何重置你的路由器?@Hackoo我通过bat文件(使用/执行TST10命令删除和创建PoEE)进行操作。通常的telnet没有等待选项(据我所知),所以我现在需要把
    reset.bat
    放在你优秀的代码中的什么地方?请你发布你所有的代码(从
    get\u my\u ip
    ip\u不一样
    @echo off
    set "IPLog=%userprofile%\Desktop\%~n0.txt"
    Set "MyCommand=nslookup myip.opendns.com resolver1.opendns.com 2^>nul"
    for /f "skip=4 delims=: tokens=2" %%a in ('%MyCommand%') do (
        Set "MyExtIP=%%a"
    )
    Call :Trim %MyExtIP%
    echo My Extenal IP Adress is : %MyExtIP%
    echo My Extenal IP Adress is : %MyExtIP% > "%IPLog%"
    PAUSE & start "" "%IPLog%" & exit
    ::*************************************************************************************
    :Trim <String>
    set "vbsfile=%tmp%\%~n0.vbs"
    (
        echo Wscript.echo Trim("%~1"^)
    )>"%vbsfile%"
    for /f "delims=" %%a in ('Cscript /nologo "%vbsfile%"') do ( set "MyExtIP=%%a" )
    If Exist "%vbsfile%" Del "%vbsfile%"
    exit /b
    ::*************************************************************************************
    
    @echo off
    :Checkloop
    Call :GetIP
    Call :CheckIP
    rem goto:checkloop
    ::******************************************************************************
    :GetIP
    set "IPLog=%userprofile%\Desktop\%~n0.txt"
    Set "MyCommand=nslookup myip.opendns.com resolver1.opendns.com 2^>nul"
    for /f "skip=4 delims=: tokens=2" %%a in ('%MyCommand%') Do (
        Set "MyExtIP=%%a"
    )
    Call :Trim %MyExtIP%
    echo My Extenal IP Adress is : "%MyExtIP%"
    echo %MyExtIP% > "%IPLog%"
    Exit /b
    ::*************************************************************************************
    :CheckIP
    If Not Exist "%IPLog%" Call :GetIP
    rem Set /p CheckIP=<%IPLog%
    for /f "delims= " %%g in ('Type "%IPLog%"') do ( set "CheckIP=%%g")
    rem echo "%CheckIP%" from file & pause
    If "%CheckIP%"=="%MyExtIP%" ( Cls & color 0A & echo the IP Adress = %CheckIP% does not changed
    ) else (
        Cls & Color 0C & echo The IP Adress is changed to %MyExtIP%
    )
    Timeout /T 30 /Nobreak
    goto:checkloop
    ::*************************************************************************************
    :Trim <String>
    set "vbsfile=%tmp%\%~n0.vbs"
    (
        echo Wscript.echo Trim("%~1"^)
    )>"%vbsfile%"
    for /f "delims=" %%a in ('Cscript /nologo "%vbsfile%"') do ( set "MyExtIP=%%a" )
    If Exist "%vbsfile%" Del "%vbsfile%"
    exit /b
    ::*************************************************************************************