gpt4 book ai didi

variables - 可变批处理循环问题

转载 作者:行者123 更新时间:2023-12-02 03:52:20 25 4
gpt4 key购买 nike

我正在尝试让这个批处理脚本正常工作,但我在使用某些命令时遇到了一些问题。它一直不将变量视为有效并将其发送到无效部分。奇怪的是我在代码的另一部分有相同的变量处理部分。这是我的代码:

:comp
cls
ECHO.
ECHO =================================================
ECHO Please Select the Device you would like to ping:
ECHO =================================================
SET /P comp="> "
IF /I %comp%==1 goto reg
IF /I %comp%==2 goto reg2
IF /I %comp%==3 goto reg3
IF /I %comp%==4 goto reg4
IF /I %comp%==5 goto reg5
IF /I %comp%==6 goto reg6
IF /I %comp%==7 goto reg7
IF /I %comp%==8 goto reg8
IF /I %comp%==9 goto reg9
IF /I %comp%==0 goto reg0
IF NOT %comp%=='1''2''3''4''5''6''7''8''9''0' goto inval
goto _ping
:inval
cls
ECHO.
ECHO ======================================
ECHO Choice invalid, please try again.
ECHO ======================================
ECHO.
pause
goto comp
:reg
cls
ECHO.
ECHO =========================================================
ECHO Please select the specific you would like to connect to.
ECHO =========================================================
ECHO.
SET /P regi="> "
IF /I %regi%==1 set str3=141
IF /I %regi%==2 set str3=142
IF /I %regi%==3 set str3=143
IF /I %regi%==4 set str3=144
IF /I %regi%==5 set str3=145
IF /I %regi%==6 set str3=146
IF /I %regi%==7 set str3=147
IF /I %regi%==8 set str3=148
IF /I %regi%==9 set str3=149
IF NOT %regi%=='1''2''3''4''5''6''7''8''9''0' goto inval
goto _ping

所以第一部分有效并发送到正确的部分。第二部分是无效响应部分,第三部分是处理要 ping 的确切设备(和最后一个八位字节)的部分。如果您输入了一个有效的选择,它仍然会转到 if not 并处理到 inval 部分。有什么建议吗?

最佳答案

问题 #1

问题出在这一行:

IF NOT %regi%=='1''2''3''4''5''6''7''8''9''0' goto inval

因为 regi 不等于字符串 '1''2''3''4''5''6''7''8''9''0 '(给定合法的 0-9 输入),脚本将始终跳转到 inval 部分。请注意,此行背后的逻辑是有缺陷的:用户不太可能将其作为输入输入,我怀疑您是否想要这种行为。

相反,我认为您只想检查 regi 是否为数字。对此的解决方案是简单地将 str3 初始化为某个初始值,并在 if 语句之后检查它:

str3=invalid
IF /I "%regi%"=="1" set str3=141
...
IF /I "%regi%"=="9" set str3=149
IF "%str3%"=="invalid" goto inval
goto _ping

如果 str3 保留“无效”值,这意味着输入无效,因为没有执行任何 if 语句。

问题 #2

这一行也是如此:

IF NOT %comp%=='1''2''3''4''5''6''7''8''9''0' goto inval

这检查 comp 到一个非常不可能的

如果执行任何 if 语句,脚本将跳转到“reg”标签之一。如果输入无效,则跳过 if 语句,因此只需将 goto inval 放在它们之后,如下所示:

IF /I "%comp%"=="1" goto reg
...
IF /I "%comp%"=="0" goto reg0
goto inval

这也使得下面的 goto ping 行变得多余。

问题 #3

我还可以在您的脚本中发现另一个问题:如果 comp 是一个空字符串,则以下比较(以及类似的):

    IF /I %comp%==1 goto reg

将计算为这个非法表达式:

IF /I ==1 goto reg

并且会导致解释器引发错误。建议将固定字符连接到比较的两侧以避免这种情况,例如:

IF /I "%comp%"=="1" goto reg1


希望对您有所帮助!

关于variables - 可变批处理循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13898490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com