这是否可以编写 Ping .bat 文件,我只能在其中输入 IP 地址的最后一位数字并开始 ping。比如 192.168.0.(这里输入 IP 最后一位)

Is this possible to write Ping .bat file in which I can enter only last digit of IP Address and ping starts. Like 192.168.0.(Here enter IP last digit)

@echo off 
color A
title Ping Tester

set /p IP= Enter your IP/Domain:
:top
PING  -n 1 %IP% | FIND "TTL="
ping -n 2 -l 10 127.0.0.1 >nul
GoTo top

你知道如何使用set /p所以只需修改它以仅请求部分IP。

@echo off 
color A
title Ping Tester
:top
set "partIP=192.168.0."
set /p "eightbit=%partIP%"
ping  -n 1 %partIP%%eightbit% | FIND "TTL="
goto top

我不确定您是否知道十进制点分 IPv4 地址的第四个八位字节中最多可能有三位数字,(在 0..255 范围内).如果您希望最终用户可以自由输入,则需要确保他们输入的内容在使用前经过验证。 Set /P 构造允许最终用户不输入任何内容,或根本不输入任何内容,(包括恶意字符串):

@Echo Off
SetLocal EnableExtensions
:Ask
Rem Request fourth octet of decimal dotted IPv4 address.
Set "octet="
Set /P "octet=Please enter fourth octet>"
Rem Verify and ask again if a valid octet was not entered.
(Set octet) 2>NUL | %SystemRoot%\System32\findstr.exe /XRC:"octet=[0123456789]" /C:"octet=[0123456789][0123456789]" /C:"octet=[01][0123456789][0123456789]" /C:"octet=2[01234][0123456789]" /C:"octet=25[012345]" 1>NUL || GoTo Ask
Rem Define the maximum number of failed attempts.
Set "maxTries=10"
:Run
For /L %%G In (1,1,%maxTries%) Do (
    %SystemRoot%\System32\PING.EXE -n 1 192.168.0.%octet% | %SystemRoot%\System32\find.exe "TTL=" && GoTo Ask
    Echo No response, re-trying
    %SystemRoot%\System32\timeout.exe /T 1 /NoBreak 1>NUL
)
GoTo Ask

如果您真的只需要一个数字,正如您的问题标题中明确指出的那样,那么您可以选择使用 choice 命令。好处是您不需要单独确定是否输入了一个条目,如果输入了条目,它是否是一个数字,而不是一个或多个不需要的字符。

@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion
:Ask
Rem Define the maximum number of failed attempts.
Set "maxTries=10"
Rem Request single digit non zero input.
%SystemRoot%\System32\choice.exe /C 123456789 /N /M "Please enter last digit>"
:Run
%SystemRoot%\System32\PING.EXE -n 1 192.168.0.%ErrorLevel% | %SystemRoot%\System32\find.exe "TTL=" || (
    Set /A maxTries -= 1
    Echo No response, re-trying . . .
    %SystemRoot%\System32\timeout.exe /T 2 /NoBreak 1>NUL
    If !maxTries! GEq 1 GoTo Run
)
GoTo Ask