批处理如何控制ping批量运行

p.bat↓
====================我是分割线====================
@echo off
for /f %%a in (ip.txt) do start /b ping %%a
pause
====================我是分割线====================

ip.txt↓
====================我是分割线====================
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.11
192.168.1.12
192.168.1.13
192.168.1.8
192.168.1.9
192.168.1.11
192.168.1.12
====================我是分割线====================

以上面为例,读取ip.txt中每行ip并用start打开进行ping。但如果要判断当读取到文本的最后一段ping时,则不使用start运行,而是直接ping 最后一行的192.168.1.12,应该如何实现?谢谢

效果示意:
====================我是分割线====================
start ping 192.168.1.1
start ping 192.168.1.2
start ping 192.168.1.3
start ping 192.168.1.4
start ping 192.168.1.5
start ping 192.168.1.11
start ping 192.168.1.12
start ping 192.168.1.13
start ping 192.168.1.8
start ping 192.168.1.9
start ping 192.168.1.11
ping 192.168.1.12
====================我是分割线====================

@echo off&setlocal enabledelayedexpansion
for /f %%i in (ip.txt) do set /a n0+=1
for /f %%a in (ip.txt) do (set /a n1+=1
if !n0! == !n1! (echo start ping %%a) else (echo start /b ping %%a))
pause

先提取最后一行行数,然后计算如果是最后一行就修改ping命令参数.

追问

非常感谢你的回答。
其实刚才我也写了跟你思路一样的代码,但是因为水平有限,无法正常运行当我在读取文件进行计算是否最后一行时,无法进行计算

for /f %%j in (test.txt) do (
set /a hhh+=1
echo %hhh%
pause)
goto :l

会出现 ECHO 处于关闭状态。
这个是因为哪里出了问题呢?希望能得到你解答

追答

这是因为for命令中不能使用在for命令中赋值的%hhh%这种变量,要使用!hhh!,需要启用延迟变量扩展.
setlocal enabledelayedexpansion

温馨提示:答案为网友推荐,仅供参考
相似回答