Я писал пакетный файл, который использует диспетчер пакетов Chocolatey для установки программного обеспечения на компьютер. Я написал его таким образом, чтобы у пользователя был выбор для установки каждой части программного обеспечения. По умолчанию каждый вопрос пакета должен использовать N в качестве ввода, если клавиша ввода нажата без ввода пользователя. Это должно пропустить шаг и перейти к следующему.
Моя проблема в том, что если я нажимаю y, чтобы принять один из пакетов, но затем нажимаю ввод для следующего пакета, ничего не вводя, вместо того, чтобы по умолчанию использовать N, он сохраняет y из предыдущего запроса.
Пример:
Вы хотите установить программное обеспечение 1?(да/нет) [возврат]
Пропуск программного обеспечения
Вы хотите установить программное обеспечение 2?(да/нет) y
Установка программного обеспечения 2
Хотите установить программное обеспечение 3?(да/нет) [возврат]
Установка программного обеспечения 3
Кажется, что последняя клавиша нажата в памяти. Есть ли способ очистить последнюю нажатую клавишу? или другое исправление. Если я пройду весь процесс, не нажимая никаких буквенных клавиш, а только нажму «Ввод», он все пропустит. Но если я нажму y хотя бы один раз, каждый последующий вопрос y также будет принят.
Предварительный просмотр кода ниже:
:choose_mbam
ECHO.
SET /P c=Would you like to install malwarebytes anti-virus?(y/N)
IF /I "%c%" EQU "Y" (
GOTO :install_mbam
) ELSE IF /I "%c%" EQU "N" (
GOTO :choose_plugins
) ELSE (
GOTO :choose_plugins
)
:install_mbam
ECHO Installing Malwarebytes
powershell -command "& cinst malwarebytes -y">NUL || ECHO Malwarebytes already installed and up to date.
GOTO :choose_plugins
:choose_plugins
ECHO.
set /P c=Would you like to update your plugins eg.flash, silverlight, java?(y/N)
if /I "%c%" EQU "Y" (
goto :install_plugins
) ELSE IF /I "%c%" EQU "N" (
goto :choose_browser
) ELSE (
GOTO :choose_browser
)
:install_plugins
ECHO Installing Silverlight
powershell -command "& cinst silverlight -y">NUL
ECHO.
ECHO Installing Flash
powershell -command "& cinst flashplayerplugin -y">NUL
ECHO.
ECHO Installing Java
powershell -command "& cinst jre8 -y">NUL
ECHO.
ECHO Installing .Net 4.5
powershell -command "& cinst dotnet4.5.1 -y">NUL
GOTO :choose_browser
:choose_browser
...
РЕДАКТИРОВАТЬ: Ответ был показан мне Стефаном в комментариях. Как я уже сказал, я не понимал, что "set /pc=" был способом установки постоянной переменной, а не задавал вопрос для пользовательского ввода (что было сделано в примере, который кто-то дал мне), поэтому я теперь заменил все экземпляры этого на «ECHO», так что все работает нормально! Не могу выбрать лучший ответ, так как ответ был в комментарии.
set /p
сохраняет предыдущее значение, если ввод пуст, поэтому установите значение по умолчанию непосредственно передset /p
) - person Stephan   schedule 13.11.2015set c=
перед каждымset /P c=...
, чтобы переменнаяc
очищалась... - person aschipfl   schedule 13.11.2015