Сохранить историю команд cmd.exe между сессиями?

Ответы:

22

Переключитесь на использование PowerShell и следуйте инструкциям на следующем сайте, чтобы включить историю:

http://blogs.msdn.com/b/powershell/archive/2006/07/01/perserving-command-history-across-sessions.aspx

В качестве альтернативы, в cmd.exe вы можете использовать «doskey / history» в конце сеанса, чтобы показать, что вы набрали в этом сеансе, но нет способа действительно загрузить его в следующий сеанс.

Hyppy
источник
6
Я решил добавить +1, потому что «Переключиться на использование PowerShell» не обязательно так просто, как звучит, в зависимости от того, для чего вы используете консоль, но информация точная soooooooooo;)
Shinrai
2
Согласовано. Я не решался отложить это, но это единственный реальный ответ, который я могу найти. Я пытался получить что-то похожее на рабочей станции, которая у меня была раньше, но для cmd.exe недоступен механизм постоянной истории :-(
Hyppy
Обратите внимание, что при этом будет сохранен список введенных вами команд, но он НЕ изменит список команд, которые появятся при нажатии клавиши «вверх» на клавиатуре. Другими словами, это не влияет на функциональность "doskey".
Mark
Следует отметить, что некоторые команды, которые работают в cmd, не работают одинаково в PowerShell, например, для mvn install `-Dmaven.test.skip = true потребуется обратный удар, как показано перед чертой
Дренай
62

Я нашел 2 способа, ни один из которых не требует переключения на PowerShell.

  1. Установите Clink , который дополняет cmd.exeпостоянная история и многое другое. Просто установите его и откройте cmdкак обычно.

  2. Установите бесплатную версию TCC / LE , которая представляет собой отдельную программу, снова предоставляя расширенную версию cmd.exe.

sparrowt
источник
5
Я немного опасаюсь замены всей системы, cmd.exeно это хороший ответ, и clink также поддерживает режим впрыска.
Лоренц Ло Зауэр
4
Вау, Клинк просто фантастика.
Крис Вебер
4
Клинк великолепен. Заменено cmdс ним, проблем не было, очень доволен.
Полковник Паник
2
Клинк потрясающий!
Хоанг Хюйн
3
Это должен быть принятый ответ. Потому что это то, что задано вопросом .. !! Это лучше, чем использовать любое другое альтернативное приложение.
Самита Чатуранга
12

Сохранение истории - это небольшой рабочий процесс - вот менее «тяжелый» способ сделать это (без внешних библиотек).

Создайте файл bat / cmd для настройки своей истории, в данном случае я назвал его MyEnvironment.cmd:

doskey save=doskey /history $g$g C:\CmdHistory.log
doskey quit=doskey /history $g$g C:\CmdHistory.log $T exit
doskey history=find /I "$*" C:\CmdHistory.log
cls

Затем запустите это из «Пуск-> Выполнить» (вы также можете настроить псевдоним для этого):

cmd.exe /K C:\MyEnvironment.cmd

Каждый раз, когда я закрываю сеанс, я нажимаю «выйти» - или, если я боюсь потерять историю в середине сеанса, я нажимаю «сохранить». Если я хочу найти что-то в истории, я просто нажимаю «Ключевое слово истории».


Согласно комментарию @ dave_thompson_085, AutoRunфункция работает хорошо, если вы не хотите использовать /Kпереключатель. Если вы правильно настроили ключ реестра, .cmdили .batнет необходимости в нем %AppData%, он может находиться в том же месте, в котором он уже находится.

Если вы используете %AppData%местоположение, учтите, что cmd, вероятно, будет искать ваш командный файл в папке «Roaming» (вместо корня AppData).

Дополнительная информация о функции AutoRunCMD: https://superuser.com/a/302553/333316

Coruscate5
источник
Для чего $gи $tдля чего?
@ Chinggis6 $gвставляет >, и $tявляется разделителем команд.
Superole
@Superole ах хорошо, г ля большей , чем и т erminate, но почему бы не использовать >и &&символы непосредственно в Doskey псевдоним?
@ Chinggis6, потому что это нарушит команду, создающую псевдоним. Тогда интерпретатор команд предположил бы, что вы имели в виду: сначала выполнить doskey quit=doskey /historyи сохранить результаты создания макроса в лог-файле (либо ничего, либо сообщение об ошибке); затем закройте окно (откажитесь от всего). ^-Я думаю, вы могли бы избежать этих персонажей с помощью вместо. Как ^>^>и ^&(... и да, вам нужен только один амперсанд)
Superole
1
Вместо явного /kможно использовать AutoRun superuser.com/a/302553/333316
dave_thompson_085
2

Я использую Cygwin . Он также предоставляет некоторые другие функциональные возможности, которые есть в Linux, но нет в Windows.

Харун
источник