我一直在研究一个简单的小项目,但批处理代码拒绝工作。谁能帮忙解决这个问题?它要么告诉我必须指定ip,要么ping结果不会显示。
@echo off
echo :1 Minecraft server resolver
echo :2 Website resolver
echo :3 Ping test
echo :4 Crash this computer
echo Please enter your selection
set /p whatapp=
cls
if %whatapp%==1 (
echo Please enter the IP of the Minecraft server you wish to resolve
set /p x=IP=
set n=1
PING %x% -n 1
call :Pingtest
pause > nul
:Pingtest
IF %errorlevel% EQU 1 (echo Server is Offline) else (GOTO:EOF)
pause
) else if %whatapp%==2 (
codetoinstallapp2
) else (
echo invalid choice
)
答案 0 :(得分:2)
延迟扩展将导致变量在执行时扩展 时间而不是在解析时,这个选项打开了
SETLOCAL
命令。当延迟扩展实际上变量可以 使用!variable_name!
引用(除了正常情况%variable_name%
)
混合CALL :Pingtest
,通过正常的代码传递达到:Pingtest
标签。
使用GOTO
or even :label
within parentheses - 包括FOR
和IF
命令 - will break their context。
成功/失败的PING
并不总是会返回%errorlevel%
/ 0
1
。
因此to reliably detect a successful ping - 将输出传输到FIND
并查找文字“TTL
”
因此,请使用
@echo OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
color 02
echo(---
echo :1 Minecraft server resolver
echo :2 Website resolver
echo :3 Ping test
echo :4 Crash this computer
echo Please enter your selection
set /p whatapp=
cls
if %whatapp%==1 (
cls
color 02
echo( ---
echo Please enter the IP of the Minecraft server you wish to resolve
set /p x=IP=
set n=1
PING !x! -n 1|FIND /I "TTL="
REM call :Pingtest
REM pause > nul
REM :Pingtest
echo !errorlevel!
IF !errorlevel! EQU 1 (echo Server !x! is Offline) else (
echo Server !x! is Online
rem next code here
REM GOTO:EOF
)
pause
) else if %whatapp%==2 (
codetoinstallapp2
) else (
echo invalid choice
)
答案 1 :(得分:0)
您需要启用delayed expansion才能使代码正常工作,因为您在代码块中分配和读取变量:
setlocal EnableDelayedExpansion
if %whatapp%==1 (
set /p x=IP=
ping !x! -n 1
)
endlocal
此外,您需要将:PINGTEST
块之外的if %whatapp%
部分移动到脚本的最末端,并在其前面放置一个goto :EOF
,以免意外陷入其中。