我似乎遇到了下面代码的问题:
@echo off
FOR /F "tokens=1" %%a IN (logs\reachable.txt) do echo %%a && set ip=%%a && call :process
:process
FOR /F "usebackq tokens=2 delims=[]" %%i in (`ping -n 1 %ip%`) do set myip=%%i && set ip=
echo %myip%
call :end
:end
exit /b
代码工作正常,但是reachable.txt(ping)中的最后一个显示两次。
HOME
192.168.1.108
HIVE
192.168.1.100
HIVE-FS
192.168.1.110
Illusion-PC
::1
Ken-PC
192.168.1.20
192.168.1.20
有人知道如何解决这个问题吗?
提前致谢。
此致 错觉
答案 0 :(得分:1)
这是因为,一旦你的第一个for
循环完成,它就会进入下面的代码。
替换:
@echo off
FOR /F "tokens=1" %%a IN (logs\reachable.txt) do echo %%a && set ip=%%a && call :process
:process
rem will be called from 'for' above AND when 'for' is done
有类似的东西:
@echo off
FOR /F "tokens=1" %%a IN (logs\reachable.txt) do echo %%a && set ip=%%a && call :process
goto :eof
:process
rem will be called from 'for' above but NOT after 'for' is done
这样就不会掉线。