2017-10-04 39 views
3

我正在研究一个将密码作为参数的BAT脚本。我想从命令历史记录和输出窗口中删除所有提到的密码。我将其添加到脚本末尾:从脚本中调用doskey /重新安装

cls 
doskey /reinstall 

第一次运行我的脚本时,它完全按照预期工作。但是,当我第二次运行它时,它看起来像doskey没有做任何事情。我按键,仍然会接到命令。

为什么这只能工作一次?我怎样才能让这个脚本工作多次?当它被用于真实的时候,我希望它能够重新运行。

回答

2

请不要使用以下:

cls 
doskey /listsize=0 
doskey /listsize=200 

此作品多次调用,并且不与历史干扰脚本调用后。

+0

但是,一旦'doskey/reinstall'运行,或者'doskey/reinstall/exename = cmd.exe'(默认的可执行文件名),它就会停止工作。 – eryksun

+0

@eryksun这很好,因为我不认为在脚本之外使用'doskey'命令,并且它不在脚本的其他地方使用。 – Dov

+1

我在调试器中看到了这个问题。重新安装基于一个未公开的控制台函数'ExpungeConsoleCommandHistory',它通过'FindExeCommandHistory'和'EmptyCommandHistory'在控制台(即conhost.exe)中实现。后者清除历史缓冲区中的标志,指示缓冲区已分配并准备就绪。一旦清除,FindExeCommandHistory将永远不会再找到这个历史缓冲区。但它是当前控制台客户端进程(即cmd.exe)的单一历史缓冲区,所以即使是'SetConsoleNumberOfCommands'(即'/ listsize')也不再有效。 – eryksun