Existe uma história global persistente de CMD?

99

Às vezes, esqueço a aparência exata da sintaxe de um comando CMD e, em seguida, gostaria de pesquisar meu próprio histórico de CMD. Claramente, dentro da mesma sessão, você pode navegar com as teclas de seta para cima e para baixo, mas e o histórico de sessões anteriores de CMD? Existe um arquivo, um registro no qual o histórico é gravado ou tudo isso vai para o Nirvana digital?

Obrigado!

raoulsson
fonte
Você pode seqüestrar o comando exit para salvar automaticamente um log antes de sair: doskey exit=doskey /history ^>^> C:\path\to\cmdhistory.log $T exit $*mas precisará descobrir como executar isso automaticamente em cada inicialização da sessão do prompt de comando. PS: verifique se o caminho do arquivo de log é gravável. C:\ não é gravável para um prompt de comando não administrador.
ADTC
@ADTC: AutoRun deve lidar com 'cada inicialização': superuser.com/a/302553/333316 ou stackoverflow.com/a/17405182/2868801
dave_thompson_085

Respostas:

30

Não, o histórico do prompt de comando do Windows não pode ser salvo quando uma sessão termina.

Massimo
fonte
3
sério? Como você sabe disso? Desculpe por questionar você, eu acho que você está certo, mas como u pode saber a menos que u programada a maldita coisa;)
raoulsson
7
Ok, deixe-me reformular :-) O interpretador de comandos do Windows ("cmd.exe") não oferece suporte para salvar / exportar / manter histórico, caso contrário a Microsoft não o documentou e ninguém jamais foi capaz Para encontrar isso. É claro que você pode tentar contornar isso, como sugeriu Sean, mas não há (ou parece haver) nenhum suporte interno para isso.
Massimo
18
Você pode pressionar F7 para ver uma lista do histórico da sessão atual.
jftuga
4
Sessão ATUAL é a palavra-chave aqui.
Massimo
3
Você pode ver / salvar o histórico executando doskey.exe /history(também é daí que vem o atalho F7, BTW), mas não há como carregá-lo de volta na sua próxima sessão.
Coderer
68

Não nativamente, mas confira: http://mridgers.github.io/clink/ , torna o cmd.exe muito mais produtivo. Citando recursos da página do projeto:

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.
Robert Bak
fonte
3
O clink resolveu tudo
ainda.Tony
5
Algum plano para incluí-lo por padrão no Windows? : D
Jaime Hablutzel
Você pode definir um ~/.inputrcao usar o clink? (e você sabe se ele pode ser usado Console ou qualquer coisa?)
Mike HR
Aparentemente, consulte o documento github.com/mridgers/clink/blob/master/docs/clink.md .
Baris Demiray
... exceto apelidos. clinkodeia doskey; esqueça todos os seus aliases de um ano e cuidadosamente designados. é por isso que parei para usá-lo. embora eu sinta falta de todos os recursos.
15

Massimo está correto, pois o histórico do prompt de comando não persiste nas sessões. Você pode pegar isso manualmente antes de fechar o prompt digitando doskey / history> history.txt

Ou ... você pode usar o PowerShell como seu prompt de CMD e seguir esta postagem para manter seu histórico nas sessões.

Sean Earp
fonte
11

Você pode usar o tinido .

O Clink combina o shell nativo do Windows cmd.exe com os poderosos recursos de edição de linha de comando da biblioteca GNU Readline, que fornecem recursos avançados de conclusão, histórico e edição de linha.

A maneira mais fácil de instalar o tim-tim é usando chocolate . Depois de instalar o chocolatey, você pode instalar o clink digitando

choco install clink

A partir da próxima vez que você iniciar o cmd.exe, ele deverá armazenar o histórico entre as sessões.

Joji Antony
fonte
Finalmente decidiu dar Chocolateyum tiro por causa deste post. A instalação foi tão fácil quanto brewno macOS. E agora eu tenho um prompt de comando do tipo Bash no Windows!
TranslucentCloud
6

É possível salvar o histórico atual em um arquivo,

`$ doskey /history > somefile.txt`

Mas parece que não há como carregá-lo de volta como história. Só é possível usar um argumento de linha de comando para carregar e executar todas as linhas,

cmd.exe /K somefile.txt

, o que pode ser útil para carregar uma lista de macros doskey. Essa invocação pode ser incluída em um atalho para que você não precise digitá-la sempre; essa referência tem algumas informações adicionais sobre essa abordagem .

Existe uma pergunta semelhante no Superusuário que traz algumas alternativas, incluindo clink , como sugerido por @RobertBak.

mMontu
fonte
Hmm, para carregá-lo de volta ao histórico, você não precisaria simplesmente salvá-lo em um arquivo .bat e executá-lo?
Pacerier 23/08/15
1
O @Pacerier executando os comandos novamente certamente os incluiria na história, mas provavelmente teria grandes efeitos colaterais. Imagine que você exclua alguns arquivos do shell e, em seguida, os recrie para fora do shell por um processo longo e doloroso. Recarregar o histórico por meio do procedimento excluiria os arquivos inesperadamente novamente.
MMontu
@ Pacerier você percebe "executá-lo" significa executar todos esses comandos, certo? Não é simplesmente carregá-los no histórico, mas deixá-los ter alguns efeitos no seu sistema.
ADTC
1

Histórico de comandos: para ativar um histórico de comandos (que pode ser acessado usando as teclas de seta para cima e para baixo), basta executar o doskey no prompt de comando. Por exemplo, para criar um histórico de comandos com 100 elementos:

doskey /listsize=100

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

Moataz AL Dawood
fonte
3
Isso não responde a pergunta?
Chopper3
1
Não funciona no Windows 10.
TranslucentCloud
1

clink é legal e o autor publica um pacote com chocolate em cada versão, no entanto, eu sugeriria o DeepBlueCLI.

Você pode usar https://github.com/sans-blue-team/DeepBlueCLI para configurar o Windows Security Event ID 4688.

Para o PowerShell, o DeepBlueCLI também usa o log de módulo (evento 4013 do PowerShell) e o log de bloco de script (4104). Não usa transcrição.

O benefício adicional é que ele registra o hash da linha de comando exe no log de eventos do AppLocker. Fonte: https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/command-line-process-auditing

Além disso, como esta solução usa a infraestrutura do Log de Eventos do Windows, você pode consultá-la através do WMI ou do PowerShell Get-EventLog. Com o clink, você precisa aprender outra ferramenta para detectar padrões de comportamento em toda a rede ou sistema.

John Zabroski
fonte
1
o evento 4688 é a chave e esse é o repositório central de como o Windows registra todos os comandos executados. todas as outras ferramentas estão apenas lendo procurando este evento. obrigado. Mas, por padrão, não está habilitado: itprotoday.com/strategy/…
Peter Teoh