3
我正在研究一个将密码作为参数的BAT脚本。我想从命令历史记录和输出窗口中删除所有提到的密码。我将其添加到脚本末尾:从脚本中调用doskey /重新安装
cls
doskey /reinstall
第一次运行我的脚本时,它完全按照预期工作。但是,当我第二次运行它时,它看起来像doskey
没有做任何事情。我按▲键,仍然会接到命令。
为什么这只能工作一次?我怎样才能让这个脚本工作多次?当它被用于真实的时候,我希望它能够重新运行。
但是,一旦'doskey/reinstall'运行,或者'doskey/reinstall/exename = cmd.exe'(默认的可执行文件名),它就会停止工作。 – eryksun
@eryksun这很好,因为我不认为在脚本之外使用'doskey'命令,并且它不在脚本的其他地方使用。 – Dov
我在调试器中看到了这个问题。重新安装基于一个未公开的控制台函数'ExpungeConsoleCommandHistory',它通过'FindExeCommandHistory'和'EmptyCommandHistory'在控制台(即conhost.exe)中实现。后者清除历史缓冲区中的标志,指示缓冲区已分配并准备就绪。一旦清除,FindExeCommandHistory将永远不会再找到这个历史缓冲区。但它是当前控制台客户端进程(即cmd.exe)的单一历史缓冲区,所以即使是'SetConsoleNumberOfCommands'(即'/ listsize')也不再有效。 – eryksun