如何在批处理文件中从控制台读取输入?

104

我该如何在批处理文件中从控制台读取输入?我的目标是实现类似于C语言中scanf的功能。在批处理文件中怎样能够实现同样的功能呢?


可能是重复的问题:在我的批处理文件中存在用户输入问题 - Raymond Chen
@ Raymond:不是的,问题是从键盘读取多个字符到一个变量中作为字符串。 - Nohsib
命令 set /p 读取用户键入的任何内容,无论是一个字母还是多个。 - Raymond Chen
3个回答

170

链接中提出的重复问题中的代码片段读取用户输入。

ECHO A current build of Test Harness exists.
set /p delBuild=Delete preexisting build [y/n]?: 
用户可以随意输入字符,这些字符将被存储在delBuild变量中。

43
请注意:您可以使用用户输入 %delBuild% - Jacob
4
需要注意的是,在启用了setlocal EnableDelayedExpansion之后,使用echo !delBuild!将会在执行时给出更可靠的输出。 - xacinay

36

如果你只是想快速地保持 cmd 实例处于打开状态而不立即退出,那么只需要简单地执行以下操作即可:

set /p asd="Hit enter to continue"
在你的脚本末尾添加它,它会保持窗口打开。 请注意,这将设置“asd”为环境变量,并可以替换为其他任何内容。

22
为此目的,有人发明了“pause”命令。同时应该使用“set /p”,而不是“set \p”。 - Stephan
6
“正如大家所说”,意味着答案已经给出,因此另一个没有更多信息的答案是不必要的。 - jeb
1
@jeb 你说得对。我的问题在于他们包含了变量和回显,而我并不需要这些。由于我没有批处理经验,所以花了我一两分钟来解析他们的答案。我相信我的答案满足了我需求的最低限度。 - TankorSmash
@Stephan 谢谢老兄,两个问题都解决了。我一直在寻找一种方法,在脚本完成后保留cmd实例,仅仅暂停X时间是不够的。 - TankorSmash
@ArslanAhmad 我刚刚测试了一下,从cmd仍然可以工作,但是从Powershell不行。确保你使用的是正确的东西。 - TankorSmash
对于任何测试此示例的人,请记住temp环境设置通常指向临时文件夹,因此这样做会覆盖您的设置。幸运的是,如果您恰好在cmd窗口中运行此命令,则仅影响该实例,并在运行exit后损坏将被消除。您可以通过执行set temp来检查当前值。 - Andrew

23

除了现有的答案之外,还可以按以下方式设置默认选项:

echo off
ECHO A current build of Test Harness exists.
set delBuild=n
set /p delBuild=Delete preexisting build [y/n] (default - %delBuild%)?:

这使用户可以在需要输入默认值时,只需按下“Enter”键即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接