Batch file 为什么这个批处理文件;记住;用户输入?

Batch file 为什么这个批处理文件;记住;用户输入?,batch-file,user-input,chocolatey,Batch File,User Input,Chocolatey,我一直在编写一个批处理文件,它使用Chocolate软件包管理器将软件安装到pc上。我编写该批处理文件的方式为用户提供了安装每个软件的选择。 默认情况下,如果在没有用户输入的情况下按enter键,则每个软件包问题都应使用N作为输入。 这应该跳过这一步,进入下一步 我的问题是,如果我按y键接受其中一个包,但在下一个包上按enter键而不键入任何内容,而不是默认为N,则会保留上一个请求的y 例如: 是否要安装软件1?(是/否)[返回] 跳过软件 是否要安装软件2?(是/否)是 安装软件2 是否要安装

我一直在编写一个批处理文件,它使用Chocolate软件包管理器将软件安装到pc上。我编写该批处理文件的方式为用户提供了安装每个软件的选择。 默认情况下,如果在没有用户输入的情况下按enter键,则每个软件包问题都应使用N作为输入。 这应该跳过这一步,进入下一步

我的问题是,如果我按y键接受其中一个包,但在下一个包上按enter键而不键入任何内容,而不是默认为N,则会保留上一个请求的y

例如:

是否要安装软件1?(是/否)[返回]
跳过软件

是否要安装软件2?(是/否)是
安装软件2

是否要安装软件3?(是/否)[返回]
安装软件3

它似乎在记忆中保留最后一个按键。有没有办法清除上次按下的键?或者其他的修复方法。 如果我在整个过程中没有按任何字母键,只按return键,它会跳过所有内容。但如果我在每一个问题上都按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”替换了所有的实例,这样就可以了!无法选择最佳答案,因为答案在注释中。

code>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

你根本没有设置默认值。它怎么知道?(
set/p
如果输入为空,则保留先前的值,因此在
set/p
之前设置默认值)请用工作示例发布答案,以便大家都清楚。谢谢。您只需在每个
set/P c=…
之前放置
set c=
,就可以清除变量
c
。。。