我想创建一个批处理文件,它在运行时看起来和工作方式与命令提示符完全相同,但我可以对用户输入的所有内容进行某些操作(例如记录它)。我该怎么做?
答案1
以下简短的批处理文件将发挥与提示相同的功能:
@echo off
:start
set inp=
set /P inp=%cd%^>
:: do evil stuff with %inp% here (optional)
%inp%
goto start
但有以下注意事项:inp
变量对于输入的人来说是可见的,如果您执行Control+ C,它会询问您是否要终止批处理文件。
代码演练:
@
– 隐藏控制台中的下一个命令echo off
– 隐藏控制台中的所有以下命令set inp=
– 将inp
变量设置为空字符串,因为inp
如果用户只是输入,以下命令将保持不变Enter。set /P inp=
– Set /P 将根据用户输入设置一个变量,提示符是符号后面的内容=
。%cd%^>
(注意末尾的空格)– 当前目录和字符>
(出于某些无聊的原因,^
是命令提示符中的转义字符)。这用作inp
变量的提示。%inp%
–执行的内容变量inp
。goto start
– 循环回到顶部。
显然,您必须问自己,为什么在没有某种exec()
调用或类似操作的情况下,这是可能的。原因是批处理的每一行都在运行时“编译” - 变量被替换到命令中。当您执行循环时,您可以看到这一点,for
每次使用set /A
(“算术”)来增加变量%
- 每次都会得到相同的值。(对于预期的行为,除了常量外,请在 set /A 中使用var
而不是。)%var%