尝试使用 Batch 阵列 ping 一些设备无法正确解析

Trying to ping a few devices using Batch arrays fails to resolve correctly

我正在尝试制作一个批处理文件来快速 ping 一些设备,以确保它们都仍在网络上。如果我手动输入命令,它似乎会给出预期的输出一次,但似乎不会在其他迭代中循环。将它们放在批处理文件中 运行 它以某种方式扰乱了我调用变量的能力。 IP 刚刚出现为“i”

有什么我想念的吗?感谢您的帮助。

set Device[0].Name=PC1
Set Device[0].IP=192.168.1.1
set Device[1].Name=PC2
Set Device[1].IP=192.168.1.2
set Device[2].Name=PC3
Set Device[2].IP=192.168.1.3

set _filepath=%userprofile%
echo %date% %time% > %_filepath%

SET /A i=0
:loop

IF %i%==3 GOTO END
call ping -n 1 %IDF[%i%].IP% | find "TTL=" >nul
if errorlevel 1 ( 
    call echo %IDF[%i%].Name% IS OFFLINE >> %_filepath%
) else (
    call echo %IDF[%i%].Name% Online >> %_filepath%
)
SET /A i=%i%+1
GOTO :loop
:END

set /a i=0 开始,

for /L %%s in (0,1,2) do (
 CALL ping -n 1 %%Device[%%s].IP%% | find "TTL=" >nul
 if errorlevel 1 ( 
    CALL echo %%Device[%%s].Name%% IS OFFLINE >> %_filepath%
 ) else (
    CALL echo %%Device[%%s].Name%% Online >> %_filepath%
 )
)

然后可以轻松更改 for /L (start,step,end) 命令以处理扩展列表,而无需使用 goto

请注意,我严重怀疑您对 _filepath 的设置,因为它似乎分配了目录名,而不是文件名

此外,使用 set "var1=data" 设置值 - 这避免了尾随空格引起的问题。比较时,使用if "thing1" == "thing2" ...避免thing1/2.

中空格引起的问题