所以我之前问了一个问题,我希望能够在批处理文件的括号内输入,而我的 q 的答案是不可能的。所以我需要更多反馈。但我现在想要在这里做的是当我输入一个 IP 地址时,而不是输入“127.0.0.1”然后按 [Eneter] id,而不是当我输入“127.0.0.1”时它只是在批处理文件中继续
有人知道这样做的好方法吗?
所以我之前问了一个问题,我希望能够在批处理文件的括号内输入,而我的 q 的答案是不可能的。所以我需要更多反馈。但我现在想要在这里做的是当我输入一个 IP 地址时,而不是输入“127.0.0.1”然后按 [Eneter] id,而不是当我输入“127.0.0.1”时它只是在批处理文件中继续
有人知道这样做的好方法吗?
在本站:http ://www.dostips.com/forum/viewtopic.php?f=3&t= 3428 GetKey.exe辅助程序有说明。该程序读取一个密钥并立即通过 ERRORLEVEL 返回其 Ascii 代码,因此不需要Enter密钥即可继续。在同一站点:ReadLine.bat 示例程序显示;它在Show.exe(另一个辅助程序)SET /P
的帮助下模拟命令,即键删除最后输入的字符并键终止输入。您可以修改 :ReadLine 子程序以满足特定需求,并显示了此功能的几个示例。BackSpaceEnter
例如,下面的子程序是 :ReadLine 的修改版本,它只读取十进制数字和点,并在读取 9 个字符后“自动”继续(如“127.0.0.1”):
:Read9DigitsAndPoints var=["prompt"]
set Point=46
set Slash=47
rem set Digit_0=48
set Digit_9=57
set %1=
set len=0
if "%~2" neq "" Show %~2
:nextKey
GetKey
set key=%errorlevel%
if %key% geq %Space% (
rem Ascii character: ignore characters that are not digits nor points
if %key% lss %Point% goto nextKey
if %key% gtr %Digit_9% goto nextKey
if %key% equ %Slash% goto nextKey
Show %key%
for /F "delims=" %%a in ('Show %key%') do set "%1=!%1!%%a"
set /A len+=1
) else if %key% equ %BackSpace% (
if defined %1 (
Show %BackSpace% %Space% %BackSpace%
set "%1=!%1:~0,-1!"
set /A len-=1
) else (
Show %Bell%
)
)
if %len% neq 9 goto nextKey
echo/
exit /B
您可以进一步修改此子程序以读取格式正确的 IP 地址(即:由 3 点分隔的四组数字),以便在用户输入您想要的 IP 后程序继续执行。到此为止,您是否知道您希望例行程序在什么时候继续?读完第三点后的第一个数字?
安东尼奥
您必须提供批处理某种方法来确定您尝试输入的 IP 地址是什么。应该有一个不同的字符来指定输入的结尾,否则 cmd 就无法知道输入将在哪里结束。正如 j__m 在评论中正确指出的那样,如果您尝试输入 127.0.0.10 ,那么在您设法输入 0 之前,您不会认为您已经输入了 127.0.0.1 对吗?一般来说,在问有没有办法让计算机做某事之前,总是问你自己有没有办法做到这一点。如果你不能告诉输入在哪里结束,如果最后没有输入,我怀疑计算机会做得更好。计算机只是一台机器,它会按照您的指示进行操作。