If statement 如果序列返回错误,批处理文件将变得复杂。

If statement 如果序列返回错误,批处理文件将变得复杂。,if-statement,batch-file,cmd,If Statement,Batch File,Cmd,我试图让用户登录,当他们这样做时,设置他们的权力或排名。级别为管理员用户和来宾。我需要为程序中的每个命令执行下面的代码。它(返回)在此时不是预期的。知道为什么吗?对于该命令,所有用户都应该能够访问它,但稍后我需要为每个组设置某些内容 if %inputCommand%==/help ( if %power%==Admin ( goto helpInfo ) else ( if %power%==User ( goto helpInfo ) else ( if %power

我试图让用户登录,当他们这样做时,设置他们的权力或排名。级别为管理员用户和来宾。我需要为程序中的每个命令执行下面的代码。它(返回)在此时不是预期的。知道为什么吗?对于该命令,所有用户都应该能够访问它,但稍后我需要为每个组设置某些内容

if %inputCommand%==/help (
  if %power%==Admin (
goto helpInfo
  ) else (
    if %power%==User (
  goto helpInfo
) else (
  if %power%==Guest (

      ) else (
        goto powerReadFailed
      )
    )
  )
) else (
goto readInputCommandTwo
    )
试试这个:

if "%inputCommand%"=="/help" (
  if "%power%"=="Admin" (
goto helpInfo
  ) else (
    if "%power%"=="User" (
  goto helpInfo
) else (
  if "%power%"=="Guest" (
        rem
      ) else (
        goto powerReadFailed
      )
    )
  )
) else (
goto readInputCommandTwo
    )
为什么这么复杂

怎么样

for %%a in (admin user guest) do if /i "%power"=="%%a" (
 for %%b in (help somethingelse whatever) do if /i "%inputcommand"=="%%b" (
 goto %%a%%b
 )
 goto %%ainvalidcommand
)
:powerreadfailed
然后可以设置标签

adminhelp userhelp guesthelp
adminsomethingelse usersomethingelse guetsomethingelse
...
写作是完全正当的

:adminhelp
:userhelp
echo admin and user get the same help
添加一个新的用户类或命令并不难

(如果
/i
表示进行不区分大小写的比较)

其他“空”命令(例如
键入nul
)也可以工作。不过,通过反转条件(
如果不是“%power%”==“Guest”
)来消除对空分支的需求将是一个更好的方法。是的,我知道:-),但我不知道OP想用他的
else
代码做什么。所以我只让它运行。