Я не могу запустить этот пакетный скрипт, он останавливается после первой команды - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь удалить программу, используя метод пакетного скриптинга.Я написал эту программу для него:

@echo off
set /p res = Are you sure to uninstall my summer car and all of its 
components? (NO = N, YES = Y)
if %res%==Y ( goto un )
else if %res%==y ( goto un )
else if %res%==N ( exit )
else if %res%==n ( exit )
:un
rmdir /s /q mysummercar
pause

Но моя программа на самом деле не работает, она показывает "Вы уверены, что удалили мою летнюю машину и ее компоненты (НЕТ = N, ДА = Y)", но после этого сообщения, когда я нажимаю Y (или y маленьким), пакетный файл исчезает.Он должен исчезать только при нажатии N (или n маленькой) или других клавиш, но исчезает и при нажатии Y.Может ли кто-нибудь сказать мне решение для запуска полного пакетного файла, т. Е. Для запуска цикла "un" программы ??

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Есть лучшие способы сделать это, но сосредоточиться на вашем текущем формате ... Основная проблема здесь заключается в том, что вы создаете переменную с пробелом перед =, поэтому переменная создается как %res % и, следовательно,%res% не является %res %

Кроме того, мы используем переключатель if /i для проверки нечувствительности к тесту.Наконец, что произойдет, если пользователь введет любое другое значение?Затем он провалится и все равно выполнит :un, поэтому просто запустите if /i "%res%"=="y"

@echo off
set /p "res=Are you sure to uninstall my summer car and all of its components? (NO = N, YES = Y): "
if /i "%res%"=="y" rmdir /s /q mysummercar

Однако гораздо более простое решение будет:

@echo off
choice /C YN /M "Press Y to uninstall my summer car or N to Cancel"
if %errorlevel% equ 1 rmdir /s /q mysummercar

Я настоятельно рекомендую прочитать некоторые из них.файлы справки.Откройте cmd.exe и выполните следующее:

  • choice /?
  • set /?
  • if /?
0 голосов
/ 02 апреля 2019

После того, как вы узнали, как использовать команды If, Set и Choice, вы можете уменьшить свой код до чего-то более разумного:

Использование Set /P

@If Not Exist "mysummercar\" Exit /B
@Set /P "res=Uninstall my summer car and all of its components [Y,N]?"
@If /I Not "%res%"=="Y" Exit /B
@RD /S/Q "mysummercar"

или немного короче, (без Not) :

@If Not Exist "mysummercar\" Exit /B
@Set /P "res=Uninstall my summer car and all of its components [Y,N]?"
@If /I "%res%"=="Y" RD /S/Q "mysummercar"


Использование Choice

@If Not Exist "mysummercar\" Exit /B
@Choice /M "Uninstall my summer car and all of its components"
@If ErrorLevel 2 Exit /B
@RD /S/Q "mysummercar"

или немного короче, Not) :

@If Not Exist "mysummercar\" Exit /B
@Choice /M "Uninstall my summer car and all of its components"
@If Not ErrorLevel 2 RD /S/Q "mysummercar"

...