Às vezes, esqueço como é a sintaxe exata de um comando CMD e gostaria de pesquisar meu próprio histórico do 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 do CMD? Existe um arquivo, um registro no qual o histórico é gravado ou tudo vai para o Nirvana digital?
Obrigado!
Não nativamente, mas confira: http://mridgers.github.io/clink/ , torna o cmd.exe muito mais produtivo. Citando recursos da página do projeto:
Não, o histórico do prompt de comando do Windows não pode ser salvo quando uma sessão termina.
Massimo está correto que o histórico do prompt de comando não persiste nas sessões. Você pode pegar isso manualmente antes de fechar seu prompt digitando doskey /history > history.txt
Ou... você pode usar o PowerShell como prompt do CMD e seguir esta postagem para persistir seu histórico entre as sessões.
Você pode usar clink .
A maneira mais fácil de instalar o clink é usar chocolatey . Depois de instalar o chocolatey, você pode instalar o clink digitando
A partir da próxima vez que você iniciar o cmd.exe, ele deverá armazenar o histórico entre as sessões.
É possível salvar o histórico atual em arquivo,
Mas parece que não há como carregá-lo de volta como histórico. 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; esta referência tem algumas informações adicionais sobre esta abordagem .
Existe uma pergunta semelhante no Superuser que traz algumas alternativas, incluindo clink , como sugerido por @RobertBak.
Sim é possivel
Se tudo o que você quer fazer é salvar seu histórico de linha de comando no final de cada sessão, aqui está uma maneira simples de fazer isso:
Como outras respostas indicaram,
doskey
permite listar o histórico da linha de comando para a sessão atual. Também permite criar macros.Esta macro simples salvará o histórico da linha de comando quando você sair de uma
CMD
sessão:Isso cria uma macro que remapeia o
EXIT
comando para copiar o histórico da linha de comando em sua pasta de perfil de usuário (por exemplo,C:\Users\yourname\commands.log
). Infelizmente, você não poderá voltar facilmente a nenhuma dessas entradas pressionando a seta para cima, mas poderá examinar o arquivo a qualquer momento para ver o que fez no passado.Carregamento automático
Então essa é a parte fácil. A parte complicada é carregar automaticamente essa macro doskey quando você inicia uma nova sessão de comando. A resposta curta e perigosa é apenas adicioná-lo ao REGISTRY em
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\AutoRun
. Qualquer coisa que você colocar nesta entrada será executada quando você iniciar umaCMD
sessão.Embora isso funcione, definitivamente criará efeitos colaterais inesperados ao fazer qualquer tipo de script*.
Então aqui está como eu faço:
Crie um arquivo chamado
autoexec.bat
e armazene-o em sua pasta de perfil (por exemplo,C:\Users\yourname\autoexec.bat
). Em seguida, altere o valor deHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\AutoRun
para isso:Então, sim, esse arquivo de lote será executado toda vez que uma
CMD
sessão for aberta, mas faremos um truque para garantir que ele não seja executado em nenhum subprocesso. Aqui está o que você colocou noautoexec.bat
arquivo:Como isso evita esses efeitos colaterais inesperados?
Tudo o que estamos fazendo é criar uma variável de ambiente chamada
AUTOEXEC
. Então, quando qualquer subprocesso subsequente abrir uma sessão de comando, eles serão executados na segunda linha e sairão imediatamente do script! Isso ocorre porque os subprocessos herdam automaticamente as variáveis de ambiente do processo pai.Mas espere, tem mais!
Isso permite que você adicione quantas macros desejar à sua sessão de comando. Por exemplo:
Agora você tem todas as macros que pode comer e está salvando sua sessão de linha de comando a cada vez. Mas lembre-se, se você não digitar explicitamente
exit
, o histórico não será salvo. Fechar a janela com o mouse não funcionará aqui.Espero que isto ajude!
* porque os subprocessos em lote geralmente abrem uma segunda cópia da
CMD
qual executará esse comando repetidamente, desde desacelerar tudo até outros problemas imprevistos.Histórico de comandos: Para habilitar um histórico de comandos (que pode ser acessado usando as teclas de seta para cima e para baixo) basta executar doskey no prompt de comando. Por exemplo, para criar um histórico de comandos de 100 elementos:
ref: https://users.cs.jmu.edu/bernstdh/web/common/help/ntshell.php
clink é legal e o autor publica um pacote de chocolate em cada lançamento, porém eu sugeriria DeepBlueCLI.
Você pode usar https://github.com/sans-blue-team/DeepBlueCLI para configurar a ID de evento de segurança do Windows 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 do exe de linha de comando 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 essa solução usa a infraestrutura do Log de Eventos do Windows, você pode consultá-la por meio do WMI ou do PowerShell
Get-EventLog
. Com o clink, você precisa aprender outra ferramenta para detectar padrões de comportamento em todo o sistema ou rede.Para salvar o histórico de comandos:
Para referenciar comandos:
Este método não alterará o histórico de comandos da sessão atual
Para adicionar o histórico de comandos da sessão atual ao último arquivo salvo:
O Windows 10 agora inclui shells alternativos e melhores ('terminais' como eles os chamam).