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

谢谢!

评论

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

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

#1 楼

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

评论


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

–raoulsson
09年12月18日在0:08

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

–马西莫
09年12月18日在6:17

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

– jftuga
2011-02-14 13:20

CURRENT会话是此处的关键字。

–马西莫
15年8月24日在5:42

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

–编码器
16年2月19日在9:45

#2 楼

不是本地的,而是查看: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.


评论


碰杯解决了一切

–Still.Tony
15年1月20日在16:27

是否有计划默认在Windows中包含它? :D

–Jaime Hablutzel
2015年3月1日22:40在

使用clink时可以设置〜/ .inputrc吗? (您知道它是否可以用于Console或其他功能?)

– Mike H-R
15年4月20日在17:39

显然,请参见github.com/mridgers/clink/blob/master/docs/clink.md文件。

– Baris Demiray
15年12月18日在9:29

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

–user246890
17年7月3日在17:31



#3 楼

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

来手动获取该信息。或者...您可以将PowerShell用作CMD提示,并按照该帖子在各个会话中保留您的历史记录。

#4 楼

您可以使用clink。


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


安装clink的最简单方法是使用Chocolatey。一旦安装了Chocolatey,就可以通过键入

choco install clink


从下一次启动cmd.exe开始安装clink,它应该存储跨会话的历史记录。

评论


最终由于这个帖子,决定给Chocolatey一炮而红。安装与在macOS中的brew一样容易。现在我在Windows中有一个类似于Bash的命令提示符!

–神经递质
16-09-23在7:39

是的,必须说Chocolatey绝对很棒,需要下载“正确的”安装文件时有些担心

–马克斯·卡罗尔
20年8月4日在9:12

#5 楼

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

`$ doskey /history > somefile.txt`


,但是似乎没有办法将其作为历史记录重新加载。使用命令行参数加载并执行所有行,

cmd.exe /K somefile.txt

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

评论


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

–起搏器
15年8月23日在22:10

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

–mMontu
2015年8月24日11:00



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

– ADTC
18年1月7日在5:07

#6 楼

命令历史记录:
要启用命令历史记录(可以使用向上和
向下箭头键访问),只需在命令提示符下执行doskey。例如,要创建包含100个元素的命令历史记录,请执行以下操作:

doskey /listsize=100


参考:https://users.cs.jmu.edu/bernstdh/web/common/help /ntshell.php

评论


那根本不能回答问题吗?

–Chopper3
2011年2月14日下午13:27

在Windows 10上不起作用

–神经递质
16-09-23在7:27

#7 楼

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

您可以使用https://github.com/sans-blue-team/DeepBlueCLI进行设置Windows安全事件ID4688。对于PowerShell,DeepBlueCLI还使用模块日志记录(PowerShell事件4013)和脚本块日志记录(4104)。它不使用转录。

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

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

评论


事件4688是关键,这是Windows如何记录所有已执行命令的中心存储。所有其他工具都只是在阅读以查找此事件。谢谢。但是默认情况下它是不启用的:itprotoday.com/strategy/…

– Peter Teoh
19年5月7日,1:13

#8 楼

要保存命令历史记录:

doskey /history > history.dos


要引用命令:

cls & type history.dos | find /v /n ""


此方法不会更改当前会话的命令历史记录

要将当前会话的命令历史记录添加到最后一个保存文件:

doskey /history >> history.dos