Есть ли глобальная, постоянная история CMD?


99

Иногда я забываю, как выглядит точный синтаксис команды CMD, и тогда я хотел бы искать свою собственную историю CMD. Очевидно, что в рамках одного сеанса вы можете просматривать его с помощью клавиш со стрелками вверх и вниз, но как насчет истории предыдущих сеансов CMD? Есть ли файл, журнал, в который записывается история, или все это идет в цифровую нирвану?

Спасибо!


Вы можете перехватить команду выхода, чтобы автоматически сохранить журнал перед выходом, doskey exit=doskey /history ^>^> C:\path\to\cmdhistory.log $T exit $*но вам необходимо выяснить, как выполнить это автоматически при каждом запуске сеанса командной строки. PS: убедитесь, что путь к файлу журнала доступен для записи. C:\ недоступно для записи для командной строки без прав администратора.
— ADTC

@ADTC: автозапуск должен обрабатывать «каждый запуск»: superuser.com/a/302553/333316 или stackoverflow.com/a/17405182/2868801
— dave_thompson_085

Ответы:


30

Нет, историю командной строки Windows нельзя сохранить после завершения сеанса.


3
серьезно? откуда ты это знаешь? Извините за вопрос, я думаю, вы правы, но как вы можете знать, если вы не запрограммировали эту
— чертову

7
Хорошо, позвольте мне перефразировать :-) Интерпретатор команд Windows («cmd.exe») не предоставляет никакой поддержки для сохранения / экспорта / хранения истории, если, если это так, Microsoft не документировала это, и никто никогда не мог найти его. Конечно, вы можете попытаться обойти это, как предложил Шон, но встроенной поддержки для этого нет (или, похоже, есть).
— Массимо

18
Вы можете нажать F7, чтобы увидеть список истории текущего сеанса.
— Jftuga

4
ТЕКУЩИЙ сеанс является ключевым словом здесь.
— Массимо

3
Вы можете просмотреть / сохранить историю, запустив doskey.exe /history(к тому же, откуда и ярлык F7, BTW), но нет способа загрузить его обратно в следующем сеансе.
— Coderer

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.


5
Есть ли планы включить его по умолчанию в Windows? : D
— Jaime Hablutzel

Можете ли вы установить ~/.inputrcпри использовании клинк? (а знаете ли вы, можно ли использовать консоль или еще что-нибудь?)
— Майк Х.Р.

Видимо, смотрите документ github.com/mridgers/clink/blob/master/docs/clink.md .
— Барис Демирай

... кроме псевдонимов. clinkненавидит doskey; забудь все свои долгие годы и тщательно назначенные псевдонимы. вот почему я перестал его использовать. хотя я скучаю по всем функциям.

15

Массимо прав, что история вашей командной строки не сохраняется между сеансами. Вы можете вручную захватить это перед закрытием вашего приглашения, набрав doskey / history> history.txt

Или ... вы можете использовать PowerShell в качестве приглашения CMD и следовать этому посту, чтобы сохранить свою историю между сеансами.


11

Вы можете использовать клинк .

Clink сочетает в себе встроенную оболочку Windows cmd.exe с мощными функциями редактирования командной строки библиотеки GNU Readline, которая обеспечивает богатые возможности завершения, истории и редактирования строк.

Самым простым способом установки клинка является использование шоколада . После установки Chocolatey вы можете установить clink, набрав

choco install clink

Начиная со следующего запуска cmd.exe, он должен хранить историю между сеансами.


В итоге решил дать Chocolateyшанс из-за этого поста. Установка была такой же простой, как и brewв macOS. И теперь у меня есть Bash-подобная командная строка в Windows!
— TranslucentCloud

6

Можно сохранить текущую историю в файл,

`$ doskey /history > somefile.txt`

Но, похоже, нет способа загрузить его обратно в историю. Можно использовать только аргумент командной строки для загрузки и выполнения всех строк,

cmd.exe /K somefile.txt

, что может быть полезно для загрузки списка макросов doskey. Этот вызов может быть включен в ярлык, поэтому вам не нужно вводить его каждый раз; эта ссылка имеет некоторую дополнительную информацию об этом подходе .

Существует аналогичный вопрос о Superuser, который предлагает некоторые альтернативы, в том числе clink , как предложено @RobertBak.


Хм, чтобы загрузить его обратно в историю, не нужно ли просто сохранить его в файл .bat и запустить?
— Pacerier

1
@Pacerier, запускающий команды снова, наверняка включит их в историю, но, вероятно, у него будут большие побочные эффекты. Представьте, что вы удаляете некоторые файлы через оболочку, а затем воссоздаете их вне оболочки через долгий и мучительный процесс. Перезагрузка истории через вашу процедуру неожиданно снова удалит файлы.
— mMontu

@Pacerier, вы понимаете, «запустить его» означает выполнение всех этих команд, верно? Это не просто загрузка их в историю, но на самом деле позволяет им иметь некоторые эффекты в вашей системе.
— ADTC

1

История команд. Чтобы включить историю команд (доступ к которой можно получить с помощью клавиш со стрелками вверх и вниз), просто введите doskey в командной строке. Например, чтобы создать историю команд из 100 элементов:

doskey /listsize=100

ссылка: https://users.cs.jmu.edu/bernstdh/web/common/help/ntshell.php


3
Это не отвечает на вопрос вообще?
— Chopper3

1
Не работает на Windows 10.
— TranslucentCloud

1

clink хорош, и автор публикует шоколадный пакет на каждом выпуске, однако я бы предложил DeepBlueCLI.

Вы можете использовать https://github.com/sans-blue-team/DeepBlueCLI для настройки идентификатора события безопасности Windows 4688.

Для PowerShell DeepBlueCLI также использует ведение журнала модулей (событие PowerShell 4013) и ведение журнала сценариев (4104). Он не использует транскрипцию.

Дополнительным преимуществом является то, что он регистрирует хэш командной строки exe в журнале событий AppLocker. Источник: https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/command-line-process-auditing

Кроме того, поскольку в этом решении используется инфраструктура журнала событий Windows, вы можете запросить ее через WMI или PowerShell Get-EventLog. С помощью clink вы должны изучить другой инструмент, чтобы обнаружить паттерны поведения в системе или сети.


1
Событие 4688 является ключом, и это центральное хранилище того, как Windows записывает все выполненные команды. все остальные инструменты просто читают, ища это событие. Благодарю. Но по умолчанию это не включено
— Питер Теох
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.