Пишех пакетен файл, който използва мениджъра на пакети Chocolatey за инсталиране на софтуер на компютър. Написах го по начин, който дава на потребителя избор за инсталиране на всяка част от софтуера. По подразбиране всеки въпрос на пакет трябва да използва N като вход, ако клавишът за въвеждане е натиснат без потребителско въвеждане. Това трябва да пропусне стъпката и да премине към следващата.
Проблемът ми е, че ако натисна y, за да приема един от пакетите, но след това натисна enter на следващия пакет, без да въвеждам нищо, вместо да е по подразбиране N, той запазва y от предишната заявка.
Пример:
Искате ли да инсталирате софтуер 1? (да/не) [връщане]
Пропускане на софтуер
Искате ли да инсталирате софтуер 2? (y/N) 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 /p c=" е начин за задаване на постоянна променлива, а не задаване на въпрос за потребителско въвеждане (което беше примерът, който някой ми даде), така че аз Сега смених всички екземпляри на това с "ECHO", така че работи добре! Не мога да избера най-добрия отговор, тъй като отговорът беше в коментар.
set /p
запазва предишната стойност, ако въвеждането е празно, така че задайте по подразбиране точно предиset /p
) - person Stephan   schedule 13.11.2015set c=
преди всякоset /P c=...
, така че променливатаc
да се изчиства... - person aschipfl   schedule 13.11.2015