为什么此批处理文件“记住”用户输入?

比尔·普罗西玛·钱德勒

我一直在编写一个批处理文件,该文件使用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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

批处理文件:用户输入路径

来自分类Dev

为什么单行批处理文件在删除驱动器上的文件时需要用户输入?

来自分类Dev

为什么从 Windows 批处理文件启动的 ffmpeg.exe 会立即关闭而不等待用户输入?

来自分类Dev

为什么来自用户的输入值在批处理文件中的代码中不起作用?

来自分类Dev

为什么我不能在批处理文件中运行此Powershell脚本?

来自分类Dev

为什么此批处理文件在“ REM”行上失败?

来自分类Dev

为什么此命令行(批处理文件)不起作用?

来自分类Dev

为什么此安装Cygwin的DOS批处理文件无人参与失败?

来自分类Dev

用户在批处理文件中输入默认值

来自分类Dev

如何在批处理文件中传递用户输入?

来自分类Dev

为什么我的批处理文件意外关闭?

来自分类Dev

php为什么我不能运行批处理文件?

来自分类Dev

自动输入批处理文件

来自分类Dev

批处理文件输入错误?

来自分类Dev

批处理文件等待输入的命令

来自分类Dev

输入到进程(批处理文件)

来自分类Dev

批处理文件中的输入路径

来自分类Dev

检查批处理文件中的空白用户输入(无输入)

来自分类Dev

使用批处理文件打开一个文件夹供用户输入

来自分类Dev

GUI获取用户输入并将其传递到批处理文件

来自分类Dev

无论如何,在批处理文件中是否有用于用户输入的预设数据?

来自分类Dev

具有用户输入的PowerShell和批处理文件

来自分类Dev

GUI获取用户输入并将其传递到批处理文件

来自分类Dev

Java执行Windows为什么批处理文件没有处理?

来自分类Dev

为什么此脚本可以从命令行运行,但是当我将其放入Windows批处理文件中时却不能运行?

来自分类Dev

拖放批处理文件-扩展此代码问题的变量

来自分类Dev

禁止此批处理文件中的所有输出

来自分类Dev

获取批处理文件以自动重命名输入文件

来自分类Dev

为什么@ECHO ON / OFF在批处理文件IF块中不起作用?

Related 相关文章

  1. 1

    批处理文件:用户输入路径

  2. 2

    为什么单行批处理文件在删除驱动器上的文件时需要用户输入?

  3. 3

    为什么从 Windows 批处理文件启动的 ffmpeg.exe 会立即关闭而不等待用户输入?

  4. 4

    为什么来自用户的输入值在批处理文件中的代码中不起作用?

  5. 5

    为什么我不能在批处理文件中运行此Powershell脚本?

  6. 6

    为什么此批处理文件在“ REM”行上失败?

  7. 7

    为什么此命令行(批处理文件)不起作用?

  8. 8

    为什么此安装Cygwin的DOS批处理文件无人参与失败?

  9. 9

    用户在批处理文件中输入默认值

  10. 10

    如何在批处理文件中传递用户输入?

  11. 11

    为什么我的批处理文件意外关闭?

  12. 12

    php为什么我不能运行批处理文件?

  13. 13

    自动输入批处理文件

  14. 14

    批处理文件输入错误?

  15. 15

    批处理文件等待输入的命令

  16. 16

    输入到进程(批处理文件)

  17. 17

    批处理文件中的输入路径

  18. 18

    检查批处理文件中的空白用户输入(无输入)

  19. 19

    使用批处理文件打开一个文件夹供用户输入

  20. 20

    GUI获取用户输入并将其传递到批处理文件

  21. 21

    无论如何,在批处理文件中是否有用于用户输入的预设数据?

  22. 22

    具有用户输入的PowerShell和批处理文件

  23. 23

    GUI获取用户输入并将其传递到批处理文件

  24. 24

    Java执行Windows为什么批处理文件没有处理?

  25. 25

    为什么此脚本可以从命令行运行,但是当我将其放入Windows批处理文件中时却不能运行?

  26. 26

    拖放批处理文件-扩展此代码问题的变量

  27. 27

    禁止此批处理文件中的所有输出

  28. 28

    获取批处理文件以自动重命名输入文件

  29. 29

    为什么@ECHO ON / OFF在批处理文件IF块中不起作用?

热门标签

归档