Почему мой файл внезапно закрывается, когда он попадает в If Statments? - PullRequest
0 голосов
/ 11 января 2019

Я использую пакетный сценарий для выполнения основных пользовательских функций (добавления пользователя, удаления, изменения типа учетной записи и т. Д.), А не для того, чтобы делать все вручную. Программа спрашивает пользователя, что он хотел бы сделать, следуя опциям с A, B, C,… G. Эта часть работает нормально, однако после того, как пользователь входит в опцию, она неизбежно закрывается. После проверки команды, следующие за оператором if, не запускаются. Как мне исправить оператор if?

@echo off

net user

echo What would you like to do?

echo A: Turn off default admin account
echo B: Turn off default guest account
echo C: Add a user
echo D: Remove a user
echo E: Change a users privilages
echo F: Change a password
echo G: Nothing

set /p en = "Enter in the Letter:"

if %en% == "A" (
    net user administrator /active:no
    echo Built-In Admin Is Turned Off
    Pause
)

if %en% == "B" (
    net user guest /active:no
    echo Guest Account Is Turned Off
    Pause
)

if %en% == "C" (
    set /p adduser = What is the name of the user you would like to add(Case Sensitive)?
    set /p addpassword = What is the password you would like to add to %adduser%?
    net user %adduser% %addpassword% /added
    echo Added %adduser%
    set /p objUser = GetObject(WinNT://MyComputer/%adduser%,user)
    %objUser%.PasswordExpired = 1
    %objUser%.SetInfo
    echo Password Will Need To Be Changed On Next Logon
    Pause

    if %en% == "D" (
    set /p deluser = What is the name of the user you would like to delete(Case Sensitive)?
    net user %deluser% /del
    echo User %deluser% has been Deleted

Код должен запускать команды, соответствующие букве, и затем оставаться открытым, пока пользователь не будет готов закрыть его. Однако он не запустит последовательность и закроется при вводе пользователем буквы, установленной для переменной 'en'.

Если это не из-за неудобств, пожалуйста, объясните, почему ваш код работает в более простых терминах. Я довольно плохо знаком с использованием пакетных сценариев и до сих пор не понимаю подавляющее большинство команд и терминов.

1 Ответ

0 голосов
/ 16 февраля 2019

Окончательный код должен выглядеть следующим образом:

@echo off

net user

echo What would you like to do?

echo A: Turn off default admin account
echo B: Turn off default guest account
echo C: Add a user
echo D: Remove a user
echo E: Change a users privilages
echo F: Change a password
echo G: Nothing

set /p en="Enter in the Letter:"
choice /c:ABCDEFG /M "Enter in the letter:" /N

if errorlevel 7 (
    rem This means the letter is 'G'; add some code here:
)

if errorlevel 6 (
    rem This means the letter is 'F'; add some code here:
)

if errorlevel 5 (
    rem This means the letter is 'E'; add some code here:
)

if errorlevel 4 (
    set /p "deluser=What is the name of the user you would like to delete (Case Sensitive)? "
    net user %deluser% /del
    echo User %deluser% has been Deleted
    pause
)

if errorlevel 3 (
    set /p "adduser=What is the name of the user you would like to add (Case Sensitive)? "
    set /p "addpassword=What is the password you would like to add to %adduser%? "
    net user %adduser% %addpassword% /added
    echo Added %adduser%
    set /p "objUser=GetObject(WinNT://MyComputer/%adduser%,user) "
    %objUser%.PasswordExpired = 1
    %objUser%.SetInfo
    echo Password Will Need To Be Changed On Next Logon
    pause
)

if errorlevel 2 (
    net user guest /active:no
    echo Guest Account Is Turned Off
    Pause
)

if errorlevel 1 (
    net user administrator /active:no
    echo Built-In Admin Is Turned Off
    Pause
)

в то время как все исправленные были упомянуты в комментариях. Введите if /?, set /? и choice /? для получения дополнительной информации в cmd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...