23

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

rmdir /S modules

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

我收到以下消息 -

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

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

4

7 回答 7

57

正如其他人指出的那样,您应该使用该/Q选项。但是还有另一种“老派”的方式来做到这一点,它在命令没有选项来抑制确认消息的那一天被使用。只需 ECHO 所需的响应并将值通过管道传输到命令中。

echo y|rmdir /s modules

我建议改用该/Q选项,但如果您遇到不提供抑制确认消息选项的命令,管道技术可能很重要。

-此技术仅在命令从标准输入读取输入时才有效,与 cmd.exe 内部命令一样。但这对于某些外部命令可能并非如此。

于 2013-03-01T00:17:00.410 回答
10

dormdir /S用于删除非空目录,dormdir /Q用于不提示。结合以rmdir /S /Q安静地删除非空目录。

于 2013-02-28T23:52:15.303 回答
4

采用rmdir /S /Q modules

/Q禁止确认提示。

于 2013-02-28T23:50:40.213 回答
3

你可以做

rmdir /Q

Q代表安静

于 2013-02-28T23:49:59.860 回答
1

如果您不处理具有英语/美国语言环境的 Windows,您可能需要检索您的机器所需的答案

@echo off

setlocal

set "ans_yes="
set "ans_no="
set "ans_all="

copy /y nul # >nul

for /f "tokens=2-7 delims=[(/)]" %%a in ( '
    copy /-y nul # ^<nul
' ) do if not defined ans_yes if "%%~e" == "" (
    set "ans_yes=%%~a"
    set "ans_no=%%~b"
    set "ans_all=%%~c"
) else (
    set "ans_yes=%%~a"
    set "ans_no=%%~c"
    set "ans_all=%%~e"
)

del /q #

set "ans_yes=%ans_yes: =%"
set "ans_no=%ans_no: =%"
set "ans_all=%ans_all: =%"

set "ans_y=%ans_yes:~0,1%"
set "ans_n=%ans_no:~0,1%"
set "ans_a=%ans_all:~0,1%"

endlocal & (
    set "ans_y=%ans_y%"
    set "ans_n=%ans_n%"
    set "ans_a=%ans_a%"
)

echo %ans_y%|rmdir /s modules
于 2020-11-09T17:56:46.347 回答
0

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

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

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

链接到几乎相同的 StackOverflow 帖子

于 2015-08-11T19:41:53.737 回答
0

是的.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 命令。如果你写了很多批处理文件,非常非常有用的东西。

如果您有Windows 版 Git,那么您已经拥有它,以及其他 GNU Core Utils。检查你PATH的。大概在C:\Users\USERNAME\AppData\Local\Programs\Git\usr\bin

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

于 2021-08-06T14:30:45.967 回答