如何在Windows上提供控制台输入(是/否)作为批处理文件的一部分。

时间:2013-02-28 23:47:08

标签: windows batch-file console

我正在编写一个简单的批处理文件(remove.bat)来删除目录及其所有子目录。该文件包含以下命令 -

rmdir /S modules

其中 modules 是非空目录的名称。

我收到以下消息 -

C:\...\bin>rmdir /S modules
modules, Are you sure (Y/N)?

如何通过批处理文件将控制台输入“Y”提供给上面的Y / N问题?有没有可以做到这一点的命令?

7 个答案:

答案 0 :(得分:33)

正如其他人所指出的那样,您应该使用/Q选项。但是还有另一种“旧学校”的方式,当命令没有选项来压制确认消息时,这些方法在当天被使用。只需ECHO所需的响应并将值传递给命令。

echo y|rmdir /s modules

我建议使用/Q选项,但如果您遇到的命令没有提供禁止确认消息的选项,那么管道技术可能很重要。

答案 1 :(得分:4)

执行rmdir /S删除非空目录,并执行rmdir /Q不提示。结合rmdir /S /Q可以安静地删除非空目录。

答案 2 :(得分:2)

使用rmdir /S /Q modules

/Q会禁止确认提示。

答案 3 :(得分:1)

你可以做到

rmdir /Q

Q代表安静

答案 4 :(得分:0)

我只想补充一点,虽然不适用于Rmdir,但在某些情况下,强制转换也可能是解决方案。因此,在一般意义上,您应该查看/ f,/ q或其某些变体的命令开关(例如,Netdom RenameComputer使用/ Force,而不是/ f)。

回声管道是一个巧妙的技巧,非常有用,因为你不会总是找到合适的开关。例如,我认为这是绕过这个Y / N提示的唯一方法......

Echo y|NETDOM COMPUTERNAME WorkComp /Add:Work-Comp

Link to nearly identical StackOverflow post

答案 5 :(得分:0)

如果您不使用英语/美国语言环境的窗口,则可能需要获取answers needed for your machine

$_POST['name'];

答案 6 :(得分:0)

YES.EXE

Yes 是一个很棒的工具,它会不断地对任何要求输入的过程回答 Yes、No 或其他任何问题。

如果你自己运行它,它只会一遍又一遍地输出 y + enter。但这并不是它的真正含义。它用于管道到另一个正在寻找对提示的响应的程序。

最简单的用例:

yes|rd temp /s

您可以使用 yes.exe输出任何参数或字符串:(愚蠢的警告示例):

yes hello world 用于简单的基本 10 PRINT "Hello World": GOTO 10

它的真正用途:

它适用于具有重复提示但没有内置 /y/n 的命令行工具。

例如,您正在复制文件并不断收到 Overwrite? (Yes/No/All) 提示,您不得不敲击“N”键表示否。以下是修复方法:

yes n|copy * c:\stuff

如何获得?

这只是 GNU Core Utils for Windows 的一小部分,它为 Windows 用户提供了基本的 Linux 命令。如果您编写大量批处理文件,则非常非常有用。

如果您有 Git for Windows,那么您已经拥有它,以及其余的 GNU Core Utils。检查您的 PATH。它可能在C:\Users\USERNAME\AppData\Local\Programs\Git\usr\bin

如果您需要下载 Windows 二进制文件,可以从许多不同的地方获得它们,但最受欢迎的可能是 https://cygwin.com/packages/summary/coreutils.html