[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 求助批处理检测网络关机2008R2系统

本帖最后由 qq3475534 于 2014-2-22 14:25 编辑

在网上找了一些发现都只支持2003系统的,不支持2008R2系统

2008 R2 系统利用ping 网络不通返回的数据和2003 XP系统返回的不一样,比如网络不通返回的数据和网线被拔出返回的数据都不同

要求检测三个内网IP 三个都通的话 或者只要有一个通,都继续检测下去, ,(如果在60秒内三个中的IP只要有1个通了,就放弃关机就自动检测下去) 三个都不通的话,

就预执行自己设置的一段批处理内容后

在过300秒后就自动安全关机,并在当前目录下写入LOG 记录是什么时间关机的..

如此一直循环下去。。

  1. @echo off
  2. :loop
  3. ping 192.168.1.1 -n 1 >nul
  4. if errorlevel 1 (
  5. ping 192.168.1.2 -n 1 >nul
  6. if errorlevel 1 (
  7. ping 192.168.1.3 -n 1 >nul
  8. if errorlevel 1 (
  9. goto error
  10. )
  11. )
  12. )
  13. ping 127.1 -n 2 >nul
  14. goto loop
  15. :error
  16. ::::::::::
  17. echo %date% %time% >>history.log
  18. shutdown -s -t 300
复制代码

TOP

2008 R2 系统利用ping 网络不通返回的数据和2003 XP系统返回的不一样-----各位看官,这是所有面向字符程序的悲哀,是所有面向对象程序的优势。

简单来说,面向对象程序,返回结果,当然是属性。简单理解,属性是不带格式的字符串。
楼主的需求,从面向对象,解题思路来讲,就是ping三个网址,返回3个true,false。
然后用if,来处理不同分支,解题。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

本帖最后由 qq3475534 于 2014-2-23 11:27 编辑

回复 2# 522235677



    这个我刚刚测试了确实可以,但是有个问题,就是比如我在关机之前任意一个IP网络ping通了,那可否取消关机在继续检测呢?

TOP

本帖最后由 qq3475534 于 2014-2-23 11:28 编辑

回复 3# PowerShell


   版主楼上的代码 我刚刚测试了确实可以,但是有个问题,就是比如我在关机之前任意一个IP网络ping通了,那可否取消关机在继续检测呢?

TOP

  1. @echo off
  2. echo wscript.sleep wscript.arguments(0)  >w.vbs
  3. :loop
  4. ping 192.168.1.1 -n 1 >nul
  5. if errorlevel 1 (
  6.         ping 192.168.1.2 -n 1 >nul
  7.         if errorlevel 1 (
  8.                 ping 192.168.1.3 -n 1 >nul
  9.                 if errorlevel 1 (
  10.                         if "%1"=="a" (exit /b) else (goto error)
  11.                 )
  12.         )
  13. )
  14. start /w w.vbs 1000
  15. goto loop
  16. :error
  17. ::::::::::
  18. start /w w.vbs 300000
  19. echo %date% %time% >>history.log
  20. call :loop a
  21. shutdown -s -t 0
复制代码

TOP

回复 6# 522235677


    这段批处理测试不行.....

TOP

回复 7# qq3475534


    我测试都可以,你出现什么错误了?

TOP

本帖最后由 PowerShell 于 2014-2-24 19:23 编辑

我观楼主的需求,是有些逻辑混乱的,当然,也可能是我逻辑混乱。

---以下为我的理解---
我用powershell写脚本,用任务计划每分钟运行。

逻辑代码为:
if (ip1 =通了 ip2 =通了 ip3=通了)
{
#3个ip都通了  
注册表某项=0
}
else
{
注册表某项++
}

if ( 注册表某项 > 5)
{
#3个ip,连续5分钟没通了
立即写日志
立即关机
}

如果第六分钟通了,楼主还想取消关机,脚本代码就没法写了,
或者说一会设置关机,一会取消,没必要瞎jb折腾了。

还不如写成 【if ( 注册表某项 > 6){立即写日志 立即关机}】
即6分钟不通立即关机。

总之,我的观点是,脚本没必要等300秒延时,没必要有取消关机。

欢迎不同看法,欢迎就楼主问题抛论据。           你有论点,更有论据,骂我也不生气。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 7# qq3475534


    你需要具体描述一下怎么个不行
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 9# PowerShell


    不是这样的你理解错啦,我的意思是检测三个IP五分钟内都不通就会自动关机,那么在5分钟内三个IP任意中的一个IP只要通了就放弃关机在继续检测

也可以这样理解,在四分钟内三个IP任意一个通了就放弃关机继续检测!

TOP

回复 8# 522235677


    我在自己笔记本WIN7 64上测试,运行脚本,一直都没关机,而且我本身网段是0段的,你的脚本是1段的我直接复制拿来用的,没修改任何地方。。

TOP

回复 12# qq3475534


    你得学会判断问题啊,加pause,取消 >nul,自己找问题

TOP

i服了楼主,88
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

返回列表