标题: [网络连接] [已解决]批处理ping批量IP地址时输出结果中为何包含乱码? [打印本页]
作者: jcy0307 时间: 2010-2-3 12:12 标题: [已解决]批处理ping批量IP地址时输出结果中为何包含乱码?
IP如下- 58.67.224.0
- 58.67.231.0
- 58.67.232.0
- 58.193.80.0
- 58.193.112.0
- 58.193.120.0
- 58.214.0.0
- 58.214.49.0
- 58.214.51.0
- 58.214.82.0
- 58.214.91.0
- 58.214.97.0
- 58.214.142.0
- 58.214.143.0
- 58.214.144.0
- 58.214.234.26
- 58.214.234.27
- 58.214.236.148
- 58.214.236.149
- 58.214.239.0
- 58.214.240.0
- 58.214.240.90
- 58.214.240.91
- 58.214.240.210
- 58.214.240.211
- 58.214.243.202
- 58.214.243.203
- 58.214.244.186
- 58.214.244.187
- 58.214.247.34
- 58.214.247.35
- 58.214.247.98
- 58.214.247.99
- 58.214.248.17
- 58.214.248.18
- 58.215.39.0
- 58.215.40.0
- 58.215.74.0
- 58.215.76.0
- 58.241.0.0
- 58.241.13.0
- 58.241.14.0
- 58.241.21.0
- 58.241.25.0
复制代码
批处理如下- @echo off
- color 0a
- for /f %%i in (ip.ini) do (
- ping -n 1 -w 1 %%i | find /i "lost = 0" && set c=1||set c=0
- if "%c%"=="0" (echo %%i>>ping.ini)
- )
- pause
复制代码
测试情况如下- ^c^c^c^c^c^c^c^c^c^c^c^c^c^c^c^c^c^c^c
- ^c^cc^c^
复制代码
不知为何 去掉@echo off后测试也没发现问题所在
请指教
[ 本帖最后由 jcy0307 于 2010-2-4 12:48 编辑 ]
作者: sysplay 时间: 2010-2-3 15:01
你的批处理没有开启变量延迟。
-
- @echo/off
- setlocal enabledelayedexpansion
- color 0a
- for /f %%i in (ip.ini) do (
- ping -n 1 -w 1 %%i | find /i "lost = 0" && set c=1||set c=0
- if "!c!"=="0" (echo %%i>>ping.ini)
- )
- pause
复制代码
至于为什么结果是^c,我也不知道
作者: jcy0307 时间: 2010-2-3 17:46
谢谢二楼的代码 但是结果依然有^c
管管 帮帮忙啊
作者: sgaizxt001 时间: 2010-2-3 19:16
- @echo off
- color 0a
- for /f "delims=" %%i in (ip.ini) do (
- ping -n 1 -w 1 %%i
- if errorlevel=1 echo %%i >>ping.ini
- )
- pause
复制代码
采用errorlevel来判断是否能ping通
作者: sysplay 时间: 2010-2-3 20:49
在我的电脑上运行挺正常的啊。
作者: Batcher 时间: 2010-2-3 21:19
- @echo off
- setlocal enabledelayedexpansion
- >ping.ini type nul
- for /f %%i in (ip.ini) do (
- ping -n 1 -w 1 %%i | find /i "lost = 0"
- if "!errorlevel!" neq "0" (
- >>ping.ini echo,%%i
- )
- )
复制代码
作者: 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
- @echo off
- setlocal enabledelayedexpansion
- >ping.ini type nul
- for /f %%i in ('type ip.ini') do (
- ping -n 1 -w 1 %%i | find /i "lost = 0"
- if "!errorlevel!" neq "0" (
- >>ping.ini echo,%%i
- )
- )
复制代码
作者: 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 |