是否有全球,持续的CMD历史?


99

有时,我忘记了CMD命令的确切语法,然后想搜索自己的CMD历史记录。显然,在同一会话中,您可以使用向上和向下箭头键进行浏览,但是以前的CMD会话的历史如何?是否有文件,历史记录要写入的日志,或者全部都归数字天堂?

谢谢!


您可以劫持exit命令以在退出前自动保存日志:doskey exit=doskey /history ^>^> C:\path\to\cmdhistory.log $T exit $*但是您需要弄清楚如何在每次命令提示符会话启动时自动执行该日志。PS:确保日志文件的路径可写。C:\ 对于非管理员命令提示符不可写。
ADTC '18年

@ADTC:AutoRun应该处理“每次启动”:superuser.com/a/302553/333316stackoverflow.com/a/17405182/2868801
dave_thompson_085

Answers:


29

否,会话结束时无法保存Windows命令提示符历史记录。


3
真的?你怎么会知道这事?抱歉问到你,我想你是对的,但是除非你编写了该死的东西,否则你怎么会知道;)
raoulsson 09/12/18

7
好的,让我改一下:-) Windows命令解释器(“ cmd.exe”)不提供对保存/导出/保存历史记录的任何支持,如果有的话,Microsoft则没有对其进行文档记录,没有人能够找到它。当然,您可以尝试解决此问题,如Sean所建议的那样,但是对此没有(或确实有)内置支持。
Massimo

18
您可以按F7查看当前会话的历史记录列表。
jftuga 2011年

4
CURRENT会话是此处的关键字。
Massimo 2015年

3
您可以通过运行来查看/保存历史记录doskey.exe /history(这也是F7快捷方式的来源,顺便说一句),但是无法在下一个会话中将其加载回去。
编码员

68

不是本机的,而是查看:http : //mridgers.github.io/clink/,使cmd.exe的工作效率更高。从项目页面引用功能:

Powerful Bash-like line editing from GNU's Readline library.
Superior path completion (TAB).
Paste from clipboard (Ctrl-V).
Support for the completion of executables/commands, and environment variables.
Undo/Redo (Ctrl-_ or Ctrl-X, Ctrl-U)
Improved command line history.
Persists across sessions.
Searchable (Ctrl-R and Ctrl-S).
History expansion (e.g. !!, !<string>, and !$).
Scriptable completion using Lua.

3
碰杯解决了所有问题
Still.Tony 2015年

5
有没有计划在Windows中默认包含它?:D
Jaime Hablutzel'3

~/.inputrc使用叮当声时可以设置吗?(您知道它是否可以用于Console或其他工具吗?)
Mike HR


...除了别名。clink讨厌doskey; 忘记您所有长达一年的精心分配的别名。这就是为什么我停止使用它的原因。虽然我错过所有功能。

15

Massimo是正确的,您的命令提示符历史记录不会在会话之间持久存在。您可以在关闭提示之前,通过键入doskey / history> history.txt来手动捕获它

或者...您可以将PowerShell用作CMD提示,并按照这篇文章在各个会话之间保留您的历史记录。


11

您可以使用clink

Clink将本机Windows Shell cmd.exe与GNU Readline库的强大命令行编辑功能结合在一起,该功能提供了丰富的完成,历史记录和行编辑功能。

安装clink的最简单方法是使用Chocolatey。安装Chocolatey之后,您可以通过键入以下内容来安装clink

choco install clink

从下次启动cmd.exe开始,它将存储跨会话的历史记录。


最终Chocolatey因为这个帖子决定出手。安装与brew在macOS中一样容易。现在我在Windows中有一个类似于Bash的命令提示符!
TranslucentCloud

6

可以将当前历史记录保存到文件中,

`$ doskey /history > somefile.txt`

但是似乎没有办法将其作为历史载入。只能使用命令行参数来加载和执行所有行,

cmd.exe /K somefile.txt

,这对加载doskey宏列表很有用。该调用可以包含在快捷方式中,因此您无需每次都键入它;此参考文献中还包含有关此方法的其他信息

正如@RobertBak所建议的那样,在超级用户上也有一个类似的问题,带来了一些替代方案,包括clink


嗯,要将其加载回历史记录中,难道您不只是需要将其保存到.bat文件并运行它吗?
Pacerier,2015年

1
@Pacerier再次运行命令肯定会将它们包含在历史记录中,但是可能会产生很大的副作用。想象一下,您通过外壳删除了一些文件,然后通过一个漫长而痛苦的过程在外壳外重新创建了它们。通过您的过程重新加载历史记录会意外地再次删除文件。
mMontu 2015年

@Pacerier,您意识到“运行它”的意思是执行所有这些命令,对吗?这不仅仅是将它们加载到历史记录中,而且实际上是让它们对您的系统产生一些影响。
ADTC '18年


1

clink很不错,作者在每个发行版上都会发布一个巧克力包装,​​但是我建议使用DeepBlueCLI。

您可以使用https://github.com/sans-blue-team/DeepBlueCLI设置Windows安全事件ID 4688。

对于PowerShell,DeepBlueCLI还使用模块日志记录(PowerShell事件4013)和脚本块日志记录(4104)。它不使用转录。

附加的好处是,它会将命令行exe的哈希记录在AppLocker事件日志中。来源:https : //docs.microsoft.com/zh-cn/windows-server/identity/ad-ds/manage/component-updates/command-line-process-auditing

另外,由于此解决方案使用Windows事件日志基础结构,因此您可以通过WMI或PowerShell查询它Get-EventLog。使用clink,您必须学习另一种工具才能检测系统或网络范围内的行为模式。


1
事件4688是关键,这是Windows如何记录所有已执行命令的中心存储。所有其他工具都只是在阅读以查找此事件。谢谢。但默认情况下是不启用: itprotoday.com/strategy/...
彼得赵明福
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.