Batch file 从脚本调用doskey/重新安装
我正在编写一个以密码为参数的BAT脚本。我想从命令历史记录和输出窗口中删除所有提到的密码。我在脚本末尾添加了以下内容:Batch file 从脚本调用doskey/重新安装,batch-file,Batch File,我正在编写一个以密码为参数的BAT脚本。我想从命令历史记录和输出窗口中删除所有提到的密码。我在脚本末尾添加了以下内容: cls doskey /reinstall 我第一次运行脚本时,它完全按照预期工作。但是,当我第二次运行它时,它看起来好像什么都没做。我按下按钮▲ 键,但仍然可以执行命令 为什么这只起作用一次?我怎样才能让它在多次运行脚本时工作?当它被真正使用时,我希望它能够背靠背运行。请执行以下操作: cls doskey /listsize=0 doskey /listsize=200
cls
doskey /reinstall
我第一次运行脚本时,它完全按照预期工作。但是,当我第二次运行它时,它看起来好像什么都没做。我按下按钮▲ 键,但仍然可以执行命令
为什么这只起作用一次?我怎样才能让它在多次运行脚本时工作?当它被真正使用时,我希望它能够背靠背运行。请执行以下操作:
cls
doskey /listsize=0
doskey /listsize=200
这可以跨多个调用工作,并且不会干扰调用脚本后的历史记录。但是,一旦运行
doskey/replay
,或者doskey/replay/exename=cmd.exe
(默认可执行文件名)。@eryksun这很好,因为我预计doskey
命令不会在脚本外部使用,也不会在脚本的其他地方使用。我在调试器中研究了这个问题。重新安装基于未记录的控制台功能ExpungeConsoleCommandHistory
,该功能通过FindExeCommandHistory
和EmptyCommandHistory
在控制台(即conhost.exe)中实现。后者清除历史缓冲区中的标志,该标志指示缓冲区已分配并准备就绪。清除后,FindExeCommandHistory
将再也找不到此历史缓冲区。但它是当前控制台客户端进程(即cmd.exe)的单一历史缓冲区,因此即使是setConsoleEnumberOfCommands
(即/listsize
)也不再起作用。当它重用历史缓冲区时,它不会再次设置已分配和就绪标志,这是一个错误,这反过来破坏了依赖于FindExeCommandHistory
@eryksun的所有有意义的函数,并与我看到的一致。我试着在/listsize
崩溃后才使用/reinstall
,但这也不起作用,使我更加困惑