Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 从脚本调用doskey/重新安装_Batch File - Fatal编程技术网

Batch file 从脚本调用doskey/重新安装

Batch file 从脚本调用doskey/重新安装,batch-file,Batch File,我正在编写一个以密码为参数的BAT脚本。我想从命令历史记录和输出窗口中删除所有提到的密码。我在脚本末尾添加了以下内容: cls doskey /reinstall 我第一次运行脚本时,它完全按照预期工作。但是,当我第二次运行它时,它看起来好像什么都没做。我按下按钮▲ 键,但仍然可以执行命令 为什么这只起作用一次?我怎样才能让它在多次运行脚本时工作?当它被真正使用时,我希望它能够背靠背运行。请执行以下操作: cls doskey /listsize=0 doskey /listsize=200

我正在编写一个以密码为参数的BAT脚本。我想从命令历史记录和输出窗口中删除所有提到的密码。我在脚本末尾添加了以下内容:

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
,但这也不起作用,使我更加困惑