首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 其他开发语言 >

关于批处理for /f循环遇到的有关问题,请高手指教

2012-03-08 
关于批处理for /f循环遇到的问题,请高手指教!我写了一个批处理文件,想实现ping多个ip(保存在文本文件中)并

关于批处理for /f循环遇到的问题,请高手指教!
我写了一个批处理文件,想实现ping多个ip(保存在文本文件中)并返回ping失败的ip。
不知道什么原因,for循环失效,只能取到文件中第一行的ip并得到ping的结果。请高手指教!!!

存放ip的文本文件格式如下:
92.16.1.1-计算机1
92.16.3.46-计算机2
92.23.4.126-计算机3
...

批处理代码如下:

@echo off
echo.正在检查请等待...
echo %date%>>检测结果^(PING失败^).txt
echo.
Setlocal ENABLEDELAYEDEXPANSION
::启用命令扩展,参加setlocal /?命令
for /f %%i in (IP表.txt) do (
set str1=%%i
set ch1=-
set num=8
set str=!str1:~8!
::截取字符串str1除前8位的部分赋值给str,因为我单位IP地址最短位数是8位(92.X.X.X)
:next
if not "!str!"=="" (
if "!str:~0,1!"=="!ch1!" goto last
::比较首字符是否为要找的字符,如果是则跳出循环
set /a num+=1
set str=!str:~1!
goto next
)
set /a num=0
::没有找到字符时,将num置0
:last
set ip=!str1:~0,%num%!
echo %ip% 
ping -n 1 %ip% >nul && echo %ip% ping入成功 || echo %ip% ping入失败 && echo %str1%>>检测结果^(PING失败^).txt
)
echo.
echo.检查完成,按任意键退出并查看"检测结果(PING失败).txt"
pause>nul
start 检测结果^(PING失败^).txt





[解决办法]
建议两个地方
1) 我记得是setlocal ENABLEEXTENSIONS
2) "92.16.1.1-计算机1" 我觉得应该加一个for 把ip和hostname 分开 for /f "tokes=1 delims=-"
[解决办法]
试试下面的

for /f "tokens=1* delims=-" %%i in (IP表.txt) do (
ping -n 1 %%i >nul && echo %%i-%%j ping入成功 || echo %%i-%%j ping入失败 && echo %%i-%%j >>检测结果^(PING失败^).txt
)

热点排行