Как уже упоминалось в комментариях выше, вам нужно правильно использовать переменные, однако вы можете использовать choice
вместо set /p
для своих команд.
@echo off
:load
rem imitation of loading the os
color 70
ver
title boot
echo please wait...
timeout /t 3 >nul
cls
systeminfo
rem in here user types name he wants to be his account name
:login
title login
cls
date /t
timeout /t 2>nul
cls
echo welcome to windows 71
echo Before we begin please type your name
set /P "_name=here:"
if /i "_%name%"=="admin" goto admin
rem ms=menu start
:ms
echo %time%
echo hello %_name%
echo type HELP for list to commands
CHOICE /C HEC /M "Press H for Help, E to exit C for Calender."
goto opt%errorlevel%
:admin
echo hello %_name% to the admin panel
echo type HELP for list to commands
CHOICE /C HEC /M "Press H for Help, E to exit C for Calender."
goto opt%errorlevel%
:opt1
echo Help stuff goes here
goto :eof
:opt2
exit
:opt3
echo Calenders stuff goes here
Некоторые вещи, на которые следует обратить внимание. Вам не нужно переходить на ms
, если пользователь не является администратором, поскольку заявление о том, что он не является администратором, не будет выполнено, мы автоматически перейдем к метке ms
.
Обратите внимание, где возникли проблемыв вашем коде. то есть if %name%=admin
должно быть if "%_name%"=="admin"
с двойным знаком равенства и подчеркиванием в имени. Это также двойные кавычки, чтобы убедиться, что мы делаем совпадение без лишних пробелов. Наконец, /I
опция для перехвата ADMIN в любом случае.
См. if /?
, choice /?
из командной строки для получения дополнительной помощи по этим функциям.