Czy istnieje globalna, trwała historia CMD?

99

Czasami zapominam, jak wygląda dokładna składnia polecenia CMD, a następnie chciałbym przeszukać własną historię CMD. Oczywiście w ramach tej samej sesji możesz przeglądać ją za pomocą klawiszy strzałek w górę iw dół, ale co z historią poprzednich sesji CMD? Czy jest plik, dziennik, w którym zapisywana jest historia, czy też wszystko idzie do cyfrowej nirwany?

Dzięki!

raoulsson
źródło
Możesz przejąć komendę exit, aby automatycznie zapisać dziennik przed wyjściem: doskey exit=doskey /history ^>^> C:\path\to\cmdhistory.log $T exit $*ale musisz dowiedzieć się, jak wykonać to automatycznie przy każdym uruchomieniu sesji wiersza polecenia. PS: Upewnij się, że ścieżka do pliku dziennika jest zapisywalna. C:\ nie można zapisać w wierszu polecenia innym niż administrator.
ADTC
@ ADTC: AutoRun powinien obsługiwać „każde uruchomienie”: superuser.com/a/302553/333316 lub stackoverflow.com/a/17405182/2868801
dave_thompson_085

Odpowiedzi:

29

Nie, historii wiersza poleceń systemu Windows nie można zapisać po zakończeniu sesji.

Massimo
źródło
3
na serio? Skąd ty to wiesz? Przepraszam, że cię przesłuchałem, myślę, że masz rację, ale skąd możesz wiedzieć, chyba że zaprogramowałeś to cholerstwo;)
raoulsson,
7
Ok, pozwól mi przeformułować :-) Interpretator poleceń systemu Windows („cmd.exe”) nie zapewnia żadnego wsparcia dla zapisywania / eksportowania / przechowywania historii, jeśli tak, to Microsoft nie udokumentował tego i nikt nigdy nie był w stanie znaleźć to. Możesz oczywiście spróbować to obejść, jak sugerował Sean, ale nie ma (lub wydaje się, że nie ma) wbudowanej obsługi tego.
Massimo,
18
Możesz nacisnąć klawisz F7, aby wyświetlić listę historii bieżącej sesji.
jftuga
4
SŁOWA BIEŻĄCA jest tutaj słowem kluczowym.
Massimo,
3
Możesz zobaczyć / zapisać historię, uruchamiając doskey.exe /history(stąd też pochodzi skrót F7, BTW), ale nie ma sposobu, aby załadować go z powrotem w następnej sesji.
Coderer
68

Nie natywnie, ale sprawdź: http://mridgers.github.io/clink/ , sprawia, że ​​cmd.exe jest znacznie bardziej produktywny. Cytowanie funkcji ze strony projektu:

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
źródło
3
brzęk rozwiązał wszystko
Still.Tony
5
Jakieś plany domyślnego włączenia go do systemu Windows? : D
Jaime Hablutzel
Czy możesz ustawić a ~/.inputrc, używając clink? (i czy wiesz, czy może być używana konsola, czy coś takiego?)
Mike HR
Najwyraźniej zobacz dokument github.com/mridgers/clink/blob/master/docs/clink.md .
Baris Demiray,
... z wyjątkiem aliasów. clinknienawidzi doskey; zapomnij o swoich wieloletnich i starannie przypisanych pseudonimach. dlatego przestałem go używać. chociaż tęsknię za wszystkimi funkcjami.
15

Massimo ma rację, że historia wiersza poleceń nie zachowuje się podczas sesji. Możesz to ręcznie pobrać przed zamknięciem monitu, wpisując doskey / history> history.txt

Lub ... możesz użyć programu PowerShell jako monitu CMD i postępuj zgodnie z tym postem, aby zachować swoją historię między sesjami.

Sean Earp
źródło
11

Możesz użyć brzęku .

Clink łączy natywną powłokę systemu Windows cmd.exe z potężnymi funkcjami edycji wiersza poleceń biblioteki GNU Readline, która zapewnia bogate możliwości uzupełniania, historii i edycji linii.

Najłatwiejszym sposobem zainstalowania brzęku jest użycie czekolady . Po zainstalowaniu Chocolatey możesz zainstalować Clink, wpisując

choco install clink

Począwszy od następnego uruchomienia cmd.exe, powinien on przechowywać historię między sesjami.

Joji Antony
źródło
W końcu postanowiłem spróbować Chocolateyze względu na ten post. Instalacja była równie prosta jak breww macOS. A teraz mam podobny do Basha wiersz poleceń w systemie Windows!
TranslucentCloud,
6

Możliwe jest zapisanie bieżącej historii do pliku,

`$ doskey /history > somefile.txt`

Ale wydaje się, że nie ma sposobu, aby załadować go z powrotem jako historię. Można użyć tylko argumentu wiersza poleceń, aby załadować i wykonać wszystkie wiersze,

cmd.exe /K somefile.txt

, co może być przydatne do załadowania listy makr doskey. To wywołanie może być zawarte w skrócie, więc nie trzeba go wpisywać za każdym razem; to odniesienie zawiera dodatkowe informacje na temat tego podejścia .

Podobne pytanie dotyczy Superużytkownika, które przynosi pewne alternatywy, w tym brzęk , jak sugeruje @RobertBak.

mMontu
źródło
Hmm, aby załadować go z powrotem do historii, czy nie musiałbyś po prostu zapisać go w pliku .bat i uruchomić?
Pacerier
1
@Pacerier ponownie uruchamiając polecenia z pewnością włączy je z powrotem do historii, ale prawdopodobnie będzie miał poważne skutki uboczne. Wyobraź sobie, że usuwasz niektóre pliki przez powłokę, a następnie odtwarzasz je poza powłoką przez długi i bolesny proces. Ponowne załadowanie historii za pomocą procedury spowoduje nieoczekiwane ponowne usunięcie plików.
mMontu
@Pacerier zdajesz sobie sprawę, że „uruchom” oznacza wykonanie wszystkich tych poleceń, prawda? To nie tylko ładowanie ich do historii, ale faktyczne pozwolenie im wpływać na twój system.
ADTC
1

Historia poleceń: Aby włączyć historię poleceń (dostęp do nich można uzyskać za pomocą klawiszy strzałek w górę i w dół), wystarczy wykonać polecenie doskey w wierszu polecenia. Na przykład, aby utworzyć historię poleceń zawierającą 100 elementów:

doskey /listsize=100

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

Moataz AL Dawood
źródło
3
To wcale nie odpowiada na pytanie?
Chopper3
1
Nie działa w systemie Windows 10.
TranslucentCloud,
1

clink jest fajny, a autor publikuje czekoladowy pakiet na każdym wydaniu, jednak sugerowałbym DeepBlueCLI.

Możesz użyć https://github.com/sans-blue-team/DeepBlueCLI, aby skonfigurować identyfikator zdarzenia bezpieczeństwa Windows 4688.

W przypadku programu PowerShell DeepBlueCLI wykorzystuje również rejestrowanie modułów (zdarzenie PowerShell 4013) i rejestrowanie bloków skryptów (4104). Nie używa transkrypcji.

Dodatkową korzyścią jest to, że rejestruje skrót pliku exe wiersza poleceń w dzienniku zdarzeń AppLocker. Źródło: https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/command-line-process-auditing

Ponadto, ponieważ to rozwiązanie korzysta z infrastruktury dziennika zdarzeń systemu Windows, można przesyłać zapytania za pomocą WMI lub PowerShell Get-EventLog. Dzięki brzęczeniu musisz nauczyć się innego narzędzia do wykrywania wzorców zachowań w całym systemie lub sieci.

John Zabroski
źródło
1
zdarzenie 4688 jest kluczem i jest to centralny sklep, w którym system Windows rejestruje wszystkie wykonane polecenia. wszystkie inne narzędzia tylko czytają w poszukiwaniu tego wydarzenia. dzięki. Ale domyślnie nie jest to możliwe: itprotoday.com/strategy/…
Peter Teoh