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