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

99

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

Спасибо!

raoulsson
источник
Вы можете перехватить команду выхода, чтобы автоматически сохранить журнал перед выходом, 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 нельзя сохранить после завершения сеанса.

Massimo
источник
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.
Роберт Бак
источник
3
Клинк
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.

mMontu
источник
Хм, чтобы загрузить его обратно в историю, не нужно ли просто сохранить его в файл .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 записывает все выполненные команды. все остальные инструменты просто читают, ища это событие. Благодарю. Но по умолчанию это не включено
Питер Теох