Board logo

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

作者: jcy0307    时间: 2010-2-3 12:12     标题: [已解决]批处理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 编辑 ]
作者: sysplay    时间: 2010-2-3 15:01

你的批处理没有开启变量延迟。
  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,我也不知道
作者: jcy0307    时间: 2010-2-3 17:46

谢谢二楼的代码 但是结果依然有^c
管管 帮帮忙啊
作者: sgaizxt001    时间: 2010-2-3 19:16

  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通
作者: sysplay    时间: 2010-2-3 20:49

在我的电脑上运行挺正常的啊。
作者: Batcher    时间: 2010-2-3 21:19

  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. )
复制代码

作者: jcy0307    时间: 2010-2-3 22:00

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

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

请楼主不要将批命名为系统程序名如ping.bat。
作者: Batcher    时间: 2010-2-3 22:18

  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. )
复制代码

作者: jcy0307    时间: 2010-2-3 22:20

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

我来解释下吧:

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

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

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

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

编写的程序名与系统重名(如ping.bat和ping.exe就是重名的)。
作者: jcy0307    时间: 2010-2-4 12:10

版主辛苦了!
记下了
作者: qzwqzw    时间: 2010-2-5 21:29

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

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

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

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

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




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