Ping命令批处理问题

@echo off
:start
for /l %%a in (1,1,255) do (
for /f "tokens=1" %%b in ('ping 192.168.1.%%a -n 1 -w 1^|find /i "来自"') do set z=%%b
if "%z%"=="来自" echo 192.168.1.%%a 在线
if "%z%"=="" echo 192.168.1.%%a 离线
)
pause>nul&goto start
帮忙看看命令,为什么全部输出都是离线的这条... 我单独测试 ping那条命令的输出的确是 “来自”

在for中使用循环变量,需要开启环境变量延迟。并更改变量的百分号为感叹号。

@echo off
setlocal enabledelayedexpansion

:start
for /l %%a in (1,1,255) do (
for /f "tokens=1" %%b in ('ping 192.168.1.%%a -n 1 -w 1^|find /i "来自"') do set z=%%b
if "!z!"=="来自" echo 192.168.1.%%a 在线
if "!z!"=="" echo 192.168.1.%%a 离线
)
pause>nul&goto start

不过我推荐您使用我这个代码

@echo off

:Start
for /l %%a in (1,1,255) do (
ping 192.168.1.%%a -n "1" | findstr /i "TTL=" >nul 2>nul && echo 192.168.1.%%a 在线 || echo 192.168.1.%%a 离线
)
echo Ping完成
pause>nul & goto Start
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-01
findstr去掉i,加上i默认找的是字母,实际找的是汉子
相似回答