¿Existe una historia global y persistente de CMD?

99

A veces olvido cómo se ve la sintaxis exacta de un comando CMD y luego me gustaría buscar en mi propio historial CMD. Claramente, dentro de la misma sesión, puede navegar con las teclas de flecha arriba y abajo, pero ¿qué pasa con el historial de sesiones anteriores de CMD? ¿Hay un archivo, un registro en el que se escribe el historial o todo va al Nirvana digital?

¡Gracias!

Raoulsson
fuente
Puede secuestrar el comando de salida para guardar automáticamente un registro antes de salir: doskey exit=doskey /history ^>^> C:\path\to\cmdhistory.log $T exit $*pero deberá descubrir cómo ejecutarlo automáticamente en cada inicio de sesión del símbolo del sistema. PD: asegúrese de que la ruta del archivo de registro sea editable. C:\ no se puede escribir para un símbolo del sistema que no sea de administrador.
ADTC
@ADTC: ejecución automática debe manejar 'cada inicio': superuser.com/a/302553/333316 o stackoverflow.com/a/17405182/2868801
dave_thompson_085

Respuestas:

30

No, el historial del símbolo del sistema de Windows no se puede guardar cuando finaliza una sesión.

Massimo
fuente
3
¿de verdad? ¿Cómo sabes esto? Lo sentimos para ser interrogado ti, supongo que tienes razón, pero ¿cómo se puede saber a menos que u u programar la maldita cosa;)
raoulsson
77
Ok, déjenme reformular :-) El intérprete de comandos de Windows ("cmd.exe") no proporciona ningún soporte para guardar / exportar / mantener el historial, de lo contrario, Microsoft no lo documentó y nadie pudo para encontrarlo. Por supuesto, puede intentar evitar eso, como sugirió Sean, pero no hay (o parece haber) ningún soporte integrado para esto.
Massimo
18
Puede presionar F7 para ver una lista del historial de la sesión actual.
jftuga
44
La sesión ACTUAL es la palabra clave aquí.
Massimo
3
Puede ver / guardar el historial ejecutando doskey.exe /history(de ahí también proviene el acceso directo F7, por cierto), pero no hay forma de volver a cargarlo en su próxima sesión.
Coderer
68

No de forma nativa, pero echa un vistazo: http://mridgers.github.io/clink/ , hace que cmd.exe sea mucho más productivo. Citando características de la página del proyecto:

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
fuente
3
clink resolvió todo
Still.Tony
55
¿Algún plan para incluirlo por defecto en Windows? : D
Jaime Hablutzel
¿Se puede establecer un ~/.inputrccuando se utiliza clink? (¿y sabes si se puede usar la consola o algo así?)
Mike HR
Aparentemente, vea el documento github.com/mridgers/clink/blob/master/docs/clink.md .
Baris Demiray
... excepto los alias. clinkaborrece doskey; olvide todos sus alias de años y cuidadosamente asignados. por eso me detuve a usarlo. Aunque extraño todas las características.
15

Massimo tiene razón en que el historial del símbolo del sistema no persiste en las sesiones. Puede tomar esto manualmente antes de cerrar su solicitud escribiendo doskey / history> history.txt

O ... podría usar PowerShell como su solicitud de CMD y seguir esta publicación para conservar su historial en todas las sesiones.

Sean Earp
fuente
11

Puedes usar clink .

Clink combina el shell nativo de Windows cmd.exe con las potentes funciones de edición de línea de comandos de la biblioteca GNU Readline, que proporciona una completa finalización, historial y capacidades de edición de línea.

La forma más fácil de instalar clink es usando chocolate . Una vez que instale chocolatey, puede instalar clink escribiendo

choco install clink

A partir de la próxima vez que inicie cmd.exe, debería almacenar el historial en todas las sesiones.

Joji Antony
fuente
Finalmente decidí darle Chocolateyuna oportunidad por esta publicación. La instalación fue tan fácil como brewen macOS. ¡Y ahora tengo un símbolo del sistema similar a Bash en Windows!
TranslucentCloud
6

Es posible guardar el historial actual en un archivo,

`$ doskey /history > somefile.txt`

Pero parece que no hay forma de volver a cargarlo como historia. Solo es posible usar un argumento de línea de comando para cargar y ejecutar todas las líneas,

cmd.exe /K somefile.txt

, lo que puede ser útil para cargar una lista de macros de doskey. Esta invocación podría incluirse en un acceso directo para que no necesite escribirla cada vez; esta referencia tiene información adicional sobre este enfoque .

Hay una pregunta similar sobre Superusuario que trae algunas alternativas, incluido el clink , como lo sugiere @RobertBak.

mMontu
fuente
Hmm, para volver a cargarlo en el historial, ¿no debería simplemente guardarlo en un archivo .bat y ejecutarlo?
Pacerier
1
@Pacerier ejecutando los comandos nuevamente seguramente los incluiría nuevamente en el historial, pero probablemente tendría grandes efectos secundarios. Imagine que elimina algunos archivos a través del shell y luego los recrea fuera del shell a través de un proceso largo y doloroso. Recargar el historial a través de su procedimiento eliminaría inesperadamente los archivos nuevamente.
mMontu
@Pacerier te das cuenta de que "ejecutarlo" significa ejecutar todos esos comandos, ¿verdad? No se trata simplemente de cargarlos en el historial, sino de permitir que tengan algunos efectos en su sistema.
ADTC
1

Historial de comandos: para habilitar un historial de comandos (al que se puede acceder utilizando las teclas de flecha arriba y abajo) simplemente ejecute doskey en el símbolo del sistema. Por ejemplo, para crear un historial de comandos de 100 elementos:

doskey /listsize=100

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

Moataz AL Dawood
fuente
3
¿Eso no responde a la pregunta en absoluto?
Chopper3
1
No funciona en Windows 10.
TranslucentCloud
1

tintinar es agradable y el autor publica un paquete de chocolate en cada lanzamiento, sin embargo, sugeriría DeepBlueCLI.

Puede usar https://github.com/sans-blue-team/DeepBlueCLI para configurar el Id. De evento de seguridad de Windows 4688.

Para PowerShell, DeepBlueCLI también utiliza el registro de módulos (evento 4013 de PowerShell) y el registro de bloques de script (4104). No usa transcripción.

El beneficio adicional es que registra el hash de la línea de comando exe en el registro de eventos de AppLocker. Fuente: https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/command-line-process-auditing

Además, debido a que esta solución utiliza la infraestructura de registro de eventos de Windows, puede consultarla a través de WMI o PowerShell Get-EventLog. Con clink, debe aprender otra herramienta para detectar patrones de comportamiento en todo el sistema o la red.

John Zabroski
fuente
1
El evento 4688 es la clave, y esa es la tienda central de cómo Windows registra todos los comandos ejecutados. todas las otras herramientas solo están leyendo buscando este evento. Gracias. Pero por defecto no está habilitado: itprotoday.com/strategy/…
Peter Teoh