我一直在编写一个批处理文件,该文件使用Chocolatey软件包管理器将软件安装到PC。我以一种让用户可以选择安装每个软件的方式来编写它。默认情况下,如果在没有用户输入的情况下按下回车键,则每个软件包问题都应使用N作为输入。这应该跳过该步骤,然后转到下一个步骤。
我的问题是,如果我按y接受其中一个包,然后在不键入任何内容的情况下在下一个包上按Enter,而不是将其默认设置为N,则它将y与上一个请求保留在一起。
例子:
您是否要安装软件1?(是/否)[返回]
跳过软件
您是否要安装软件2?(是/否)y
安装软件2
您是否要安装软件3?(是/否)[返回]
安装软件3
好像是最后一个按键一直在内存中。有没有办法清除最后按下的键?或其他一些修复方法。如果我在不按任何字母键的情况下进行整个过程,而仅按回车键,则会跳过所有操作。但是,如果我按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
如果用户只是按ENTER键,则使变量的值保持不变。您可以在询问用户之前使用此行为来预定义默认值:
set c=N
SET /P c=Question?(y/N)
如果您不想使用默认值,请将默认值设置为空:
set "c="
SET /P c=Question?(y/n)
if not defined c echo no Input given
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句