我的批处理程序有点问题。它很简单,我打算让它显示一个输出,但只有当它不相等时。但是......我遇到了问题。这是我目前的代码;
注意:它被修改为隐藏敏感信息以及删除不相关的代码。
@echo off
TITLE //
set mode=0
set output=Surrr
:WORKSTATION
cls
if statements here //
echo.
if NOT "%output%"=="Surrr" (
echo %output%
set output=Surrr )
if statements //
set /p "i="
if /I %i%==FTP (
goto FTP )
if /I %i%==RDP (
goto RDP )
if /I %i%==HTML (
set mode=1
goto WORKSTATION )
if /I %i%==GAMEMAKER (
set mode=2
goto WORKSTATION )
if /I %i%==EXIT (
exit
goto WORKSTATION
) else (
set output=Invalid Input
goto WORKSTATION )
unrelated code //
现在,当我键入一个不起作用的输入时,它会将输出设置为“Invalid Input”并按原样显示它。问题是当我输入有效输入时,该字被重置为“Surrr”但未被if NOT
语句拾取。此后,不应该显示“Surrr”。
我一般都处于停滞状态。有什么建议/想法可以克服这个问题吗? 任何事都会有所帮助,谢谢!
答案 0 :(得分:0)
你应该引用你的字符串作业" - 因此:
set "output=Surrr"
像
这样的陈述的问题...
set output=Surrr )
是空间包含在分配的值中,因此"%output%"
将是Surrr Space ,而不是Surrr
,因为您可能会通过调试{{{ 1}}(这就是为什么在调试时我倾向于echo
值echo
,因此+++
结尾echo +++%output%+++
- 它会使隐形空间变得明显)
您还应该使用(例如)
if /I "%i%"=="HTML" (
在处理用户输入时的首选项。如果用户在响应中键入空格或逗号,引用输入可确保if
语句在语法上是正确的(不是防弹,但处理许多用户输入错误)