Board logo

标题: [网络连接] [分享]批处理ping域名发现IP变了就写到文本里 [打印本页]

作者: Batcher    时间: 2020-9-10 21:05     标题: [分享]批处理ping域名发现IP变了就写到文本里

【问题】
我想ping一个域名发现ip变了就写到文本里,变的时间同时输出。

【代码】
Step1.bat
  1. @echo off
  2. set "URL=www.baidu.com"
  3. for /f "tokens=2 delims=[]" %%i in ('ping -n 1 %URL% ^| findstr "\[.*\]"') do (
  4.     set IP=%%i
  5. )
  6. echo,%IP%
  7. pause
复制代码
Step2.bat
  1. @echo off
  2. set "URL=bbs.csdn.net"
  3. set "FileIP=IP.txt"
  4. set "FileLog=URL_IP.log"
  5. if not exist "%FileIP%" (
  6.     >"%FileIP%" echo 0.0.0.0
  7. )
  8. if not exist "%FileLog%" (
  9.     >"%FileLog%" type nul
  10. )
  11. :Monitor
  12. for /f "tokens=2 delims=[]" %%a in ('ping -n 1 %URL% ^| findstr "\[.*\]"') do (
  13.     set IP_Current=%%a
  14. )
  15. set /p IP_Previous=<"%FileIP%"
  16. echo %IP_Previous% -- %IP_Current%
  17. if "%IP_Previous%" neq "%IP_Current%" (
  18.     >"%FileIP%" echo %IP_Current%
  19.     >>"%FileLog%" echo [%date% %time%] %IP_Current%
  20. )
  21. timeout /nobreak /t 3 >nul
  22. goto :Monitor
复制代码

作者: xuxianking    时间: 2021-3-19 10:23

大佬,遇到一个问题,更换set "URL=bbs.csdn.net" 中的连接,
运行反馈的信息是“ECHO 处于关闭状态。” 有的连接可以,有的不行。这可能是什么原因呢?
作者: Batcher    时间: 2021-3-19 12:04

回复 2# xuxianking


请参考Q-01观察一下哪行代码在报错:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
作者: xuxianking    时间: 2021-3-19 22:11

回复 3# Batcher


    c:\>test.bat

c:\>set "URL=kefu.xiaojukeji.com"

c:\>set "FileIP=IP.txt"

c:\>set "FileLog=URL_IP.log"

c:\>if not exist "IP.txt" (echo 0.0.0.0 1>"IP.txt" )

c:\>if not exist "URL_IP.log" (type nul 1>"URL_IP.log" )

c:\>for /F "tokens=2 delims=[]" %a in ('ping -n 1 kefu.xiaojukeji.com | findstr "kefu.xiaojukeji.com"') do (set IP_Current=%a )

c:\>set /p IP_Previous= 0<"IP.txt"

c:\>echo 0.0.0.0 --
0.0.0.0 --

c:\>if "0.0.0.0" NEQ "" (
echo  1>"IP.txt"
echo [2021/03/19 周五 22:09:16.45]  1>>"URL_IP.log"
)

c:\>timeout /nobreak /t 3  1>nul

c:\>goto :Monitor

c:\>for /F "tokens=2 delims=[]" %a in ('ping -n 1 kefu.xiaojukeji.com | findstr "kefu.xiaojukeji.com"') do (set IP_Current=%a )

c:\>set /p IP_Previous= 0<"IP.txt"

c:\>echo ECHO 处于打开状态。 --
ECHO 处于打开状态。 --

c:\>if "ECHO 处于打开状态。" NEQ "" (
echo  1>"IP.txt"
echo [2021/03/19 周五 22:09:19.25]  1>>"URL_IP.log"
)

c:\>timeout /nobreak /t 3  1>nul

c:\>goto :Monitor

c:\>for /F "tokens=2 delims=[]" %a in ('ping -n 1 kefu.xiaojukeji.com | findstr "kefu.xiaojukeji.com"') do (set IP_Current=%a )

c:\>set /p IP_Previous= 0<"IP.txt"

c:\>echo ECHO 处于打开状态。 --
ECHO 处于打开状态。 --

c:\>if "ECHO 处于打开状态。" NEQ "" (
echo  1>"IP.txt"
echo [2021/03/19 周五 22:09:22.30]  1>>"URL_IP.log"
)

c:\>timeout /nobreak /t 3  1>nul

c:\>goto :Monitor

c:\>for /F "tokens=2 delims=[]" %a in ('ping -n 1 kefu.xiaojukeji.com | findstr "kefu.xiaojukeji.com"') do (set IP_Current=%a )

c:\>set /p IP_Previous= 0<"IP.txt"

c:\>echo ECHO 处于打开状态。 --
ECHO 处于打开状态。 --

c:\>if "ECHO 处于打开状态。" NEQ "" (
echo  1>"IP.txt"
echo [2021/03/19 周五 22:09:25.33]  1>>"URL_IP.log"
)

c:\>timeout /nobreak /t 3  1>nul

c:\>goto :Monitor

c:\>for /F "tokens=2 delims=[]" %a in ('ping -n 1 kefu.xiaojukeji.com | findstr "kefu.xiaojukeji.com"') do (set IP_Current=%a )

c:\>set /p IP_Previous= 0<"IP.txt"

c:\>echo ECHO 处于打开状态。 --
ECHO 处于打开状态。 --

c:\>if "ECHO 处于打开状态。" NEQ "" (
echo  1>"IP.txt"
echo [2021/03/19 周五 22:09:28.35]  1>>"URL_IP.log"
)

c:\>timeout /nobreak /t 3  1>nul

c:\>goto :Monitor

c:\>for /F "tokens=2 delims=[]" %a in ('ping -n 1 kefu.xiaojukeji.com | findstr "kefu.xiaojukeji.com"') do (set IP_Current=%a )

c:\>set /p IP_Previous= 0<"IP.txt"

c:\>echo ECHO 处于打开状态。 --
ECHO 处于打开状态。 --

c:\>if "ECHO 处于打开状态。" NEQ "" (
echo  1>"IP.txt"
echo [2021/03/19 周五 22:09:31.22]  1>>"URL_IP.log"
)

c:\>timeout /nobreak /t 3  1>nul

c:\>goto :Monitor

c:\>for /F "tokens=2 delims=[]" %a in ('ping -n 1 kefu.xiaojukeji.com | findstr "kefu.xiaojukeji.com"') do (set IP_Current=%a )

c:\>set /p IP_Previous= 0<"IP.txt"

c:\>echo ECHO 处于打开状态。 --
ECHO 处于打开状态。 --

c:\>if "ECHO 处于打开状态。" NEQ "" (
echo  1>"IP.txt"
echo [2021/03/19 周五 22:09:34.37]  1>>"URL_IP.log"
)

c:\>timeout /nobreak /t 3  1>nul

c:\>goto :Monitor

c:\>for /F "tokens=2 delims=[]" %a in ('ping -n 1 kefu.xiaojukeji.com | findstr "kefu.xiaojukeji.com"') do (set IP_Current=%a )

c:\>set /p IP_Previous= 0<"IP.txt"

c:\>echo ECHO 处于打开状态。 --
ECHO 处于打开状态。 --

c:\>if "ECHO 处于打开状态。" NEQ "" (
echo  1>"IP.txt"
echo [2021/03/19 周五 22:09:37.33]  1>>"URL_IP.log"
)

c:\>timeout /nobreak /t 3  1>nul
终止批处理操作吗(Y/N)? y
作者: thp2008    时间: 2021-3-20 14:31

回复 4# xuxianking

它这个代码的问题,出在,
  1. for /f "tokens=2 delims=[]" %%a in ('ping -n 1 %URL% ^| findstr "%URL%"') do
复制代码
中的 findstr "%URL%" 这里。因为
ping -n 1 bbs.csdn.net
正在 Ping bbs.csdn.net [47.95.50.136] 具有 32 字节的数据:

ping -n 1 www.baidu.com
正在 Ping www.a.shifen.com [14.215.177.38] 具有 32 字节的数据:
看到两个Ping后返回的域名区别没有,所以换了域名,如果Ping返回的不是跟原域名,一模一样,就出错了。
所以直接修改一下,findstr 后面的,查找变量就好了。

我也发现这个问题了,修改了一下,就可以了。
  1. @echo off
  2. echo.
  3. set /p URL=请输入需要监控的完整域名FQDN:
  4. del IP.txt
  5. del URL_IP.log
  6. set "FileIP=IP.txt"
  7. set "FileLog=URL_IP.log"
  8. if not exist "%FileIP%" (
  9.     >"%FileIP%" echo 0.0.0.0
  10. )
  11. if not exist "%FileLog%" (
  12.     >"%FileLog%" type nul
  13. )
  14. :Monitor
  15. for /f "tokens=2 delims=[]" %%a in ('ping -n 1 %URL% ^| findstr/i [') do (
  16.     set IP_Current=%%a
  17. )
  18. set /p IP_Previous=<"%FileIP%"
  19. echo %IP_Previous% -- %IP_Current%
  20. if "%IP_Previous%" neq "%IP_Current%" (
  21.     >"%FileIP%" echo %IP_Current%
  22.     >>"%FileLog%" echo [%date% %time%] %IP_Current%
  23. )
  24. timeout /nobreak /t 3 >nul
  25. goto :Monitor
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2