Có một lịch sử CMD toàn cầu, liên tục?


99

Đôi khi tôi quên mất cú pháp chính xác của lệnh CMD trông như thế nào và sau đó tôi muốn tìm kiếm lịch sử CMD của riêng tôi. Rõ ràng, trong cùng một phiên, bạn có thể duyệt nó bằng các phím mũi tên lên và xuống nhưng còn lịch sử của các phiên CMD cũ thì sao? Có một tập tin, một bản ghi lịch sử được ghi vào hoặc tất cả đi đến Nirvana kỹ thuật số?

Cảm ơn!


Bạn có thể chiếm quyền điều khiển lệnh thoát để tự động lưu nhật ký trước khi thoát: doskey exit=doskey /history ^>^> C:\path\to\cmdhistory.log $T exit $*nhưng bạn sẽ cần tìm ra cách thực hiện điều này tự động tại mỗi lần khởi động phiên nhắc lệnh. PS: Đảm bảo đường dẫn của tệp nhật ký có thể ghi. C:\ không thể ghi đối với dấu nhắc lệnh không phải của quản trị viên.
ADTC

@ADTC: AutoRun nên xử lý 'mỗi lần khởi động': superuser.com/a/302553/333316 hoặc stackoverflow.com/a/17405182/2868801
dave_thedom_085

Câu trả lời:


30

Không, lịch sử nhắc lệnh của Windows không thể được lưu khi phiên kết thúc.


3
cho thật? Làm thế nào bạn biết điều này? Xin lỗi vì đã hỏi bạn, tôi đoán bạn đúng nhưng làm sao bạn biết được trừ khi bạn lập trình thứ chết tiệt đó;)
raoulsson

7
Ok, hãy để tôi viết lại :-) Trình thông dịch lệnh Windows ("cmd.exe") không cung cấp bất kỳ hỗ trợ nào cho việc lưu / xuất / lưu lịch sử, nếu có, Microsoft đã không ghi lại tài liệu đó và không ai có thể để tìm thấy nó. Tất nhiên bạn có thể cố gắng giải quyết vấn đề đó, như Sean đề xuất, nhưng có (hoặc dường như là) không có hỗ trợ tích hợp nào cho việc này.
Massimo

18
Bạn có thể nhấn F7 để xem danh sách lịch sử của phiên hiện tại.
jftuga

4
Phiên HIỆN TẠI là từ khóa ở đây.
Massimo

3
Bạn có thể xem / lưu lịch sử bằng cách chạy doskey.exe /history(đó cũng là nơi xuất phát phím tắt F7, BTW) nhưng không có cách nào để tải lại trong phiên tiếp theo.
Bộ giải mã

68

Không phải tự nhiên mà hãy kiểm tra: http://mridgers.github.io/clink/ , làm cho cmd.exe hiệu quả hơn nhiều. Trích dẫn các tính năng từ trang dự án:

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
clink đã giải quyết mọi thứ
Still.Tony

5
Bất kỳ kế hoạch để bao gồm nó theo mặc định trong Windows? : D
Jaime Hablutzel

Bạn có thể thiết lập một ~/.inputrckhi sử dụng clink? (và bạn có biết liệu nó có thể được sử dụng Bảng điều khiển hay bất cứ thứ gì không?)
Mike HR


... Ngoại trừ bí danh. clinkghét doskey; quên tất cả các bí danh lâu năm và được chỉ định cẩn thận. đó là lý do tại sao tôi dừng sử dụng nó mặc dù tôi bỏ lỡ tất cả các tính năng

15

Massimo là chính xác rằng lịch sử nhắc lệnh của bạn không tồn tại qua các phiên. Bạn có thể tự lấy cái này trước khi đóng lời nhắc bằng cách nhập doskey / history> history.txt

Hoặc ... bạn có thể sử dụng PowerShell làm lời nhắc của CMD và theo dõi bài đăng này để tiếp tục lịch sử của bạn qua các phiên.


11

Bạn có thể sử dụng clink .

Clink kết hợp cmd.exe shell Windows gốc với các tính năng chỉnh sửa dòng lệnh mạnh mẽ của thư viện GNU Readline, cung cấp khả năng hoàn thành, lịch sử và khả năng chỉnh sửa dòng phong phú.

Cách dễ nhất để cài đặt clink là sử dụng chocolatey . Khi bạn cài đặt chocolatey, bạn có thể cài đặt clink bằng cách gõ

choco install clink

Bắt đầu từ lần tiếp theo bạn bắt đầu cmd.exe, nó sẽ lưu trữ lịch sử qua các phiên.


Cuối cùng quyết định để cung cấp cho Chocolateymột shot vì bài viết này. Cài đặt dễ dàng như brewtrong macOS. Và bây giờ tôi có một dấu nhắc lệnh giống Bash trong Windows!
translucentCloud

6

Có thể lưu lịch sử hiện tại vào tập tin,

`$ doskey /history > somefile.txt`

Nhưng dường như không có cách nào để tải nó trở lại như lịch sử. Chỉ có thể sử dụng một đối số dòng lệnh để tải và thực thi tất cả các dòng,

cmd.exe /K somefile.txt

, những gì có thể hữu ích để tải một danh sách các macro doskey. Yêu cầu này có thể được bao gồm trong một phím tắt để bạn không cần phải gõ nó mọi lúc; tài liệu tham khảo này có một số thông tin bổ sung về phương pháp này .

Có một câu hỏi tương tự như trên superuser đó mang lại một số lựa chọn thay thế, trong đó có tiếng leng keng , theo đề nghị của @RobertBak.


Hmm, để tải nó trở lại vào lịch sử, bạn có cần chỉ cần lưu nó vào tệp .bat và chạy nó không?
Pacerier

1
@Pacerier chạy lại các lệnh chắc chắn sẽ đưa chúng trở lại trong lịch sử, nhưng nó có thể sẽ có tác dụng phụ lớn. Hãy tưởng tượng rằng bạn xóa một số tệp qua shell và sau đó tạo lại chúng bên ngoài shell thông qua một quá trình dài và đau đớn. Tải lại lịch sử thông qua thủ tục của bạn sẽ bất ngờ xóa các tệp một lần nữa.
mMontu

@Pacerier bạn nhận ra "chạy nó" có nghĩa là thực thi tất cả các lệnh đó, phải không? Nó không chỉ đơn giản là tải chúng vào lịch sử, mà thực sự cho phép chúng có một số hiệu ứng trên hệ thống của bạn.
ADTC

1

Lịch sử lệnh: Để kích hoạt lịch sử lệnh (có thể được truy cập bằng các phím mũi tên lên và xuống), chỉ cần thực hiện doskey tại dấu nhắc lệnh. Ví dụ: để tạo lịch sử lệnh gồm 100 phần tử:

doskey /listsize=100

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


3
Điều đó không trả lời câu hỏi nào cả ??
Chopper3

1
Không hoạt động trên Windows 10.
TranslucentCloud

1

clink là tốt đẹp và tác giả xuất bản một gói sô cô la trên mỗi bản phát hành, tuy nhiên tôi sẽ đề nghị DeepBlueCLI.

Bạn có thể sử dụng https://github.com/sans-blue-team/DeepBlueCLI để thiết lập ID sự kiện bảo mật Windows 4688.

Đối với PowerShell, DeepBlueCLI cũng sử dụng ghi nhật ký mô-đun (sự kiện PowerShell 4013) và ghi nhật ký khối tập lệnh (4104). Nó không sử dụng phiên âm.

Lợi ích được thêm vào là nó ghi nhật ký băm của dòng lệnh exe trong nhật ký sự kiện AppLocker. Nguồn: https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/command-line- process-auditing

Ngoài ra, vì giải pháp này sử dụng cơ sở hạ tầng Windows Event Log, bạn có thể truy vấn nó thông qua WMI hoặc PowerShell Get-EventLog. Với clink, bạn phải tìm hiểu một công cụ khác để phát hiện các kiểu hành vi trên toàn hệ thống hoặc mạng.


1
event 4688 là chìa khóa và đó là cửa hàng trung tâm cách Windows ghi lại tất cả các lệnh được thực thi. tất cả các công cụ khác chỉ là đọc tìm kiếm sự kiện này. cảm ơn. Nhưng theo mặc định, nó không được kích hoạt: itprotoday.com/strargety/ từ
Peter Teoh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.