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

[网络连接] [已解决]批处理ping批量IP地址时输出结果中为何包含乱码?

IP如下
  1. 58.67.224.0
  2. 58.67.231.0
  3. 58.67.232.0
  4. 58.193.80.0
  5. 58.193.112.0
  6. 58.193.120.0
  7. 58.214.0.0
  8. 58.214.49.0
  9. 58.214.51.0
  10. 58.214.82.0
  11. 58.214.91.0
  12. 58.214.97.0
  13. 58.214.142.0
  14. 58.214.143.0
  15. 58.214.144.0
  16. 58.214.234.26
  17. 58.214.234.27
  18. 58.214.236.148
  19. 58.214.236.149
  20. 58.214.239.0
  21. 58.214.240.0
  22. 58.214.240.90
  23. 58.214.240.91
  24. 58.214.240.210
  25. 58.214.240.211
  26. 58.214.243.202
  27. 58.214.243.203
  28. 58.214.244.186
  29. 58.214.244.187
  30. 58.214.247.34
  31. 58.214.247.35
  32. 58.214.247.98
  33. 58.214.247.99
  34. 58.214.248.17
  35. 58.214.248.18
  36. 58.215.39.0
  37. 58.215.40.0
  38. 58.215.74.0
  39. 58.215.76.0
  40. 58.241.0.0
  41. 58.241.13.0
  42. 58.241.14.0
  43. 58.241.21.0
  44. 58.241.25.0
复制代码
批处理如下
  1. @echo off
  2. color 0a
  3. for /f %%i in (ip.ini) do (
  4. ping -n 1 -w 1 %%i | find /i "lost = 0" && set c=1||set c=0
  5. if "%c%"=="0" (echo %%i>>ping.ini)
  6. )
  7. pause
复制代码
测试情况如下
  1. ^c^c^c^c^c^c^c^c^c^c^c^c^c^c^c^c^c^c^c
  2. ^c^cc^c^
复制代码
不知为何 去掉@echo off后测试也没发现问题所在
请指教

[ 本帖最后由 jcy0307 于 2010-2-4 12:48 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

你的批处理没有开启变量延迟。
  1. @echo/off
  2. setlocal enabledelayedexpansion
  3. color 0a
  4. for /f %%i in (ip.ini) do (
  5. ping -n 1 -w 1 %%i | find /i "lost = 0" && set c=1||set c=0
  6. if "!c!"=="0" (echo %%i>>ping.ini)
  7. )
  8. pause
复制代码

至于为什么结果是^c,我也不知道

TOP

谢谢二楼的代码 但是结果依然有^c
管管 帮帮忙啊

TOP

  1. @echo off
  2. color 0a
  3. for /f "delims=" %%i in (ip.ini) do (
  4.         ping -n 1 -w 1 %%i
  5.         if errorlevel=1 echo %%i >>ping.ini
  6. )
  7. pause
复制代码
采用errorlevel来判断是否能ping通

TOP

在我的电脑上运行挺正常的啊。

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. >ping.ini type nul
  4. for /f %%i in (ip.ini) do (
  5.     ping -n 1 -w 1 %%i | find /i "lost = 0"
  6.     if "!errorlevel!" neq "0" (
  7.         >>ping.ini echo,%%i
  8.     )
  9. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

管管给的代码和4楼给的代码依然存在上述问题
管管代码运行后 电脑有连续的错误提示音 并且点击关闭按钮是显示大量乱码
4楼代码 运行后 没有错误提示音 但无法生成IP.INI 运行大概7秒钟自动退出

TOP

6楼的代码中可以不要这个“| find /i "lost = 0"”吧。。。

请楼主不要将批命名为系统程序名如ping.bat。
***共同提高***

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. >ping.ini type nul
  4. for /f %%i in ('type ip.ini') do (
  5.     ping -n 1 -w 1 %%i | find /i "lost = 0"
  6.     if "!errorlevel!" neq "0" (
  7.         >>ping.ini echo,%%i
  8.     )
  9. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回8楼 终于找到问题所在了 哈哈
牛啊,居然被一个文件名给害苦了!
batmen能解释下为何不能用PING.BAT命名吗?
好让其他同志们都明白

TOP

我来解释下吧:

    系统在运行命令时是有一定的规律的,当你在cmd中输入a后,它先会在默认路径path下依次寻找有没有这个名称的可执行程序

(a.exe a.bat a.com),如果有它就会运行其中的a程序,如果没有它又会在当前目录下查找,如有则运行,没有则会提示“'a' 不是

内部或外部命令,也不是可运行的程序或批处理程序”。一旦我们将要运行的程序命令成系统程序名如ping.bat ping.exe ping.com

后,系统运行的则是自带的ping命令,这样就会导致错误的发生,更有甚者,还会产生让系统混乱的严重错误。所以我们绝不能将

编写的程序名与系统重名(如ping.bat和ping.exe就是重名的)。
***共同提高***

TOP

版主辛苦了!
记下了

TOP

batman正好说反了
在批处理中调用外部程序运行
如果未指定绝对路径
则首先在当前路径下搜索
如果未指定扩展名
则按照%pathext%的顺序(一般是.com,.exe,.bat,.cmd,等)从前向后搜索
如果均未找到
则按照%path%的路径顺序从前向后搜索
而且在每个路径都会按照%pathext%的顺序从前向后搜索

所以把批处理自身命名为系统程序并不是问题的关键
关键是把批处理的名字写在程序自身中执行
则因为批处理程序通常在当前路径下执行
所以程序自身通常会被最先被找到并被调用(当然也有例外的情况)

就会形成一层套一层的不断反复调用
就是所谓的“递归调用”

如果程序没有设计这方面的错误处理(就是递归达到一定条件后退出调用)
则程序就会出现各种稀奇古怪的错误

[ 本帖最后由 qzwqzw 于 2010-2-5 21:33 编辑 ]
1

评分人数

    • batman: 多谢指正,学习了!PB + 10

TOP

返回列表