在会话之间保留 cmd.exe 命令历史记录?

fir*_*ion 88 windows command-line

有没有办法在会话之间保留 cmd 命令历史记录?

spa*_*owt 76

我找到了两种方法,都不需要切换到 PowerShell。

  1. 安装Clink,它通过cmd.exe持久的历史记录等等来增强。只需安装它,然后cmd正常打开即可。

  2. 安装TCC/LE免费版,这是一个单独的程序,再次提供cmd.exe.

  • 我有点担心在系统范围内替换 `cmd.exe`,但它是一个很好的答案,并且 clink 也支持注入模式。 (6认同)
  • 克林克是辉煌的。用它替换了`cmd`,没有问题,非常满意。 (5认同)
  • 这应该是公认的答案。因为这就是问题所问的..!! 这是最好的,而不是使用任何其他替代应用程序。 (3认同)

Hyp*_*ppy 24

切换到使用 PowerShell,并按照以下站点上的说明启用历史记录:

https://devblogs.microsoft.com/powershell/perserving-command-history-across-sessions/存档

或者,在 cmd.exe 中,您可以在会话结束时使用“doskey /history”来显示您在该会话中键入的内容,但无法真正将其加载到下一个会话中。

  • 我犹豫是否要 +1,因为“切换到使用 PowerShell”并不一定像听起来那么简单,这取决于您使用控制台的内容类型,但信息是准确的 soooooooooo ;) (8认同)
  • 同意。我犹豫着要不要放下它,但这是我能找到的唯一真正的答案。我试图在我以前拥有的工作站上进行类似的操作,但是没有可用于 cmd.exe 的持久历史记录机制:-( (2认同)

Cor*_*te5 15

保存历史记录是一个很小的工作流程 - 这是一种不那么“繁重”的方法来做到这一点(没有外部库)。

创建一个 bat/cmd 文件来设置您的历史记录,在本例中我将其命名为 MyEnvironment.cmd:

doskey save=doskey /history $g$g C:\CmdHistory.log
doskey quit=doskey /history $g$g C:\CmdHistory.log $T exit
doskey history=find /I "$*" C:\CmdHistory.log
cls
Run Code Online (Sandbox Code Playgroud)

然后从“开始->运行”运行它(您也可以为此设置别名):

cmd.exe /K C:\MyEnvironment.cmd
Run Code Online (Sandbox Code Playgroud)

每次我关闭会话时,我都会点击“退出” - 或者如果我害怕在会话中丢失历史记录,我会点击“保存”。如果我想搜索历史中的某些内容,我只需点击“history KEYWORD”。


根据@dave_thompson_085 的评论,AutoRun如果您不想使用/K开关,该功能运行良好。如果您正确设置了注册表项,则.cmd.bat不需要在 中%AppData%,它可以在它已经所在的相同位置。

如果您确实使用了该%AppData%位置,请注意 cmd 可能会在“Roaming”文件夹(而不是 AppData 根目录)中查找您的批处理文件。

有关AutoRunCMD 功能的更多信息:https : //superuser.com/a/302553/333316

Autorun 更新(2020 年 10 月):我多年来一直使用此功能,但想指出许多依赖 CMD 运行后台命令的程序(Visual Studio、Win32 应用程序),如果之前运行过任何程序,会感到非常困惑传递的 CMD 命令(例如 VS 开发人员提示)。如果这引起疼痛,请切换到该/K方法。