已经达到最大的 setlocal 递归层。求解?
bat吧
全部回复
仅看楼主
level 1
想一直ping一个IP地址,不通不提示,通了弹框提醒,功能已经实现了,只是不能循环太多次
——————————————————————————————————
@echo off&title 正在持续监视网络状态……
:check
setlocal enabledelayedexpansion
set num=0
echo 正在监测中……
for /f "delims=" %%a in ('ping -n 1 1.2.3.4^|find "TTL"') do (
set /a num+=1
)
if %num% geq 1 (goto ok) else (goto check)
:ok
cls
echo 正在检查网络状态……
echo 网络已恢复,本窗口将自动关闭。
if errorlevel 0 set msg=网络已恢复!
mshta VBScript:Msgbox("%msg%",vbSystemModal,"提示")(close)
exit
———————————————————————————————————
经查询是setlocal 最多递归 32 层,超过此限制则报错,据说要及时endlocal,问题是怎么修改才能让他无限循环下去直至ping通为止呢?
2019年04月23日 08点04分 1
level 14
重新开启?
2019年04月23日 12点04分 2
是的,应该怎样修改一下呢?
2019年04月24日 00点04分
level 6
估计同文件夹中还有一个ping.bat
2019年04月24日 07点04分 4
不用啊,功能已经实现了,现在要改一下让他不再达到最大递归层就行了
2019年04月25日 01点04分
level 5
把 setlocal enabledelayedexpansion 改到 :check 前面
2019年04月25日 07点04分 5
[黑线]老去查endlocal了,没理解setlocal……多谢!解决了!
2019年04月28日 01点04分
level 9
开延迟是多余的
@echo off
set @=q&set/an=0x53b7e0b4
title Any question +%@%%@% %n%
set ip=192.168.36.1
:check
echo 正在监测中……
ping -n 2 -w 10 %ip%|>nul find "TTL"&&(goto ok)
goto check
:ok
cls
set msg=网络已恢复!
echo;%msg%
start mshta VBScript:Execute("msgbox ""%msg%"" & vbCrLf & now,,""Any question +%@%%@% %n%"":close")
exit
2019年04月25日 10点04分 6
非常感谢,一个比一个厉害!
2019年04月28日 07点04分
1