0

好的,所以我正在做一个项目,我正在做这件事,然后我到达了 confirmOne 中的 if 语句,它给了我“(此时不是预期的。”请帮忙!

许多流浪的“你到了这里!” 消息来自我试图调试它。我真的很快就需要这个。请帮忙。我也尝试删除部分,但它似乎仍然不起作用。如果您发现任何其他错误,请告诉我,因为我需要我能得到的所有帮助。谢谢!

:grabInput
echo Please enter the username of the user you wish to access.

REM - } End Echoing Information/Main Menu | Grab Input {

set /p result=
goto correctName

REM - } End Grab Input | Process Input {

:correctName
set /p input=%result%
goto confirmOne
:confirmOne
echo Got to confirmOne
pause
if %input%==[] (
  pause
  cls
  echo Oops! Looks like you didn't enter anything! Try Agian!
  echo.
  echo ................................................................................
  echo.
  goto grabInput
) ELSE (
  goto confirmTwo
)


:confirmTwo
echo Got to ConfirmTwo
pause
if %input%==~help (
  goto helpMenu
) ELSE (
  goto confirmThree
)

:confirmThree
echo Got to ConfirmThree
if %input%==~info (
  goto infoMenu
) ELSE (
  goto swapDrive
)
4

2 回答 2

1

好吧,如果您没有为 输入任何内容%input%,那么您的if语句将看起来像if ==[] (

你的if陈述应该看起来像if [%input%] == [] (

我还看到很多不必要的代码,你应该看看你的脚本。

于 2013-04-09T23:54:46.473 回答
0

批处理总是在字符串上工作。

使用语句if %input%==[],当 %input% 设置为 [nothing] (这是您尝试检测的内容)时,批量替换 [nothing] fo%input%并获取

IF ==[] (

并且很困惑,因为 '(' 不是比较运算符。

[]不是什么神奇的咒语。这是一种检测参数是否存在的旧方法,如果参数不存在,[%1] 将等于 []。当变量包含空格或其他一些字符时,它不起作用。

if "%var%"=="" is better
if not defined var is better still

注意

set /p var=

不会设置var为 [nothing] 只需按enter,它将var保持不变。

因此这

set var=something
set /p var=

将离开var设置为something。您应该将其编码为

set "var="
set /p var="Some prompt "
if not defined var echo VAR is not defined

如果行上有尾随空格,则周围的引号var=确保不设置为 [一些空格]。var

除此之外,顺序

goto somelabel
:somelabel

(REM 线无关紧要)是多余的。

同样,在

if somecondition (goto somewhere) else (goto somewhereelse)
:somewhereelse

else条件是多余的

Batch 仅将通知:label作为 aGOTO或 a的 DESTINATION CALL。否则将直接通过:label它发现的任何内容进行收费,就好像它们是评论声明一样。

于 2013-04-10T00:13:58.657 回答