[Looking for Charlie's main web site?]

Saving windows command prompt history to a file

Note: This blog post is from 2011. Some content may be outdated--though not necessarily. Same with links and subsequent comments from myself or others. Corrections are welcome, in the comments. And I may revise the content as necessary.
Do you find yourself working at the Windows (DOS) command prompt window (aka Start>Run>cmd), and after having entered many commands, wish you could save them to a file, such as before closing the window or perhaps when needing to restart?

This is a bit of esoterica, but as I've seen some searching for a solution in various help forums, I figured I'd share it here. It can be especially useful if you've been using the Microsoft LogParser command-line tool, which allows you to use SQL statements from the command line to analyze log files of all sorts. You may build up a large set of them during a session, and wish you could save them off before closing the command prompt window.

Quick Answer:

doskey /history > commands.log

(Update) And in PowerShell, use:

get-history >commands.log

Explanation

[....Continue Reading....]

Comments
Hey Charlie,

Thanks for the great post. How would I do this automatically at the end of each command session? I'm concerned about malware being installed via the command line and want to see a cumulative history for forensic purposes.

Thanks!
# Posted By Kevin | 2/14/11 2:04 PM
Kevin, as for causing an automatic dump of the commands at the close of a command window, there may well be a way to do it but I'm not aware of any. Sorry I can't help more there.
# Posted By Charlie Arehart | 2/15/11 11:54 AM
Very nice sir! I am used to being on Linux at home and I usually set my history to an amount that I am assured I wont lose what I want and since it saves my history when the terminal is closed I never thought of piping this to a file. If I can't have it just retain the history after the session is closed this is the next best thing. Thank you.
# Posted By Josh | 2/22/11 4:15 PM
Hi Charlie, I run an interactive JAVA program on the DOS and want to backup the whole interaction in a text file. For instance in ORACLE SQL PLUS prompt, you get everything spooled, when spooling. Commands as well as the output. Is there a way to achieve it in DOS ?

regards
Skt
# Posted By Sat | 9/17/11 10:41 AM
Skt, I can't imagine how that may be possible, no. Well let me put it this way: I don't see it connecting to the focus of this entry (tracking history of the command prompt). Instead, for your need I'd think you'd have to hope the tool had some way to log things itself.
# Posted By Charlie Arehart | 9/17/11 12:07 PM
Tried using schtasks to record the history, the problem is that it spawns a brand new doskey command, so it doesn't actually get the command history of the original command prompt. I guess just leave your windows open and run Charlie's cool command, run a keystroke logger, or poke around some more...
# Posted By Scott Lucas | 3/21/12 12:59 PM
Maybe I'll try powershell too...
# Posted By Scott Lucas | 3/21/12 1:01 PM
Try using
doskey /history | clip

The clip command puts it onto your clipboard, which them could be pasted into an editor (handy if you keep the editor open all the time)
# Posted By taybill | 9/20/12 7:15 PM
Very cool. Thanks for that, taybill.
# Posted By Charlie Arehart | 9/20/12 7:23 PM
Thank you very much, I was searching for this. :)
# Posted By NITIN HARANE | 10/30/12 5:07 AM
cool. thank you.
# Posted By Arun | 11/15/12 12:11 PM
Thanks much.
# Posted By samwel | 1/30/13 4:39 AM
Still helping out...two years later!! Thanks!
# Posted By John Watson | 4/17/13 4:41 PM
Any ideas on how to redirect input to dos DEBUG command without it allways locking up ? in other words regaining keyboard input instead the dos window/debug session freezes.

> DEBUG < sometypesavingfile.txt

cbxj
# Posted By nick | 9/3/13 10:35 AM
@Nick, sorry. I have no idea at all. I have never used the DOS command-line DEBUG feature before.
# Posted By Charlie Arehart | 9/3/13 1:21 PM
If you're like me and start cmd.exe through a shortcut with a setup batch file (a shortcut target as something like "%windir%\system32\cmd.exe /k c:\users\cdennis\Documents\winscripts\windows_auto.bat"), try adding the following to your startup batch script (code partially taken from "http://stackoverflow..."):

DOSKEY exit=DOSKEY /HISTORY $g$g "%USERPROFILE%\cmd_history.log"$t exit $*
DOSKEY eixt=DOSKEY /HISTORY $g$g "%USERPROFILE%\cmd_history.log"$t exit $*
DOSKEY exti=DOSKEY /HISTORY $g$g "%USERPROFILE%\cmd_history.log"$t exit $*

This will cause a log file to be written (as long as you close the command line by typing the command "exit", and not using the X button on the window).

The "$g" is not documented in "doskey /?", but it's from "prompt /?". However, it seems to work.

Keep in mind that there are security considerations for such a history file.
# Posted By Chris | 1/2/14 9:55 AM
Cool tip, Chris. Thanks.
# Posted By charlie arehart | 1/3/14 5:59 PM
Thanks for this tip - have used it numerous times over the last few years.
# Posted By Mike Steber | 10/6/15 2:37 AM
This tip also served me very well until I found out about the wonderful Clink - http://mridgers.gith...
# Posted By Ronan Mullarkey | 11/5/15 6:23 AM
Interesting, Ronan. Thanks for sharing.

So in the context of my blog post, I assume what you like most about clink is that it preserves history between command line sessions? That is indeed interesting.

So are the keyboard shortcuts, and of course the similarity to Bash for those familiar with that.

While I'd want to make sure folks seeing this do know that the Windows command line does indeed already have completion (hit the tab key while typing to get it to loop through files/folders matching any initially typed letters), I notice that clink says it's "context sensitive". I assume that means it would only show suitable things in different situations, which sounds interesting.

Hope that MS may incorporate such things some day. The Windows command line has indeed evolved over the years, incorporating more and more things from others.

Anyway, hope the tip I shared may continue to serve for a long time those who ARE still using only the Windows command line. :-)
# Posted By Charlie Arehart | 11/5/15 9:13 AM
I am running Windows 8.1 and to copy the contents of the full command prompt, I simply left click inside the window, then right click, then "select all". Then press ctrl c (which is copy) , which will copy the full text into memory. Now open word pad (or any word processor). Open a new document, then do ctrl v (which is paste). Now save the file.
# Posted By Kbguy | 1/12/16 7:58 PM
Still useful and helpful after five years. Thanks, Charlie! :-)

Regards from Spain,
-- Wayfarer
# Posted By Wayfarer | 1/28/16 4:56 AM
Thanks so much, Wayne, and glad to help. (I lament that so many people pay little attention to older blog posts. Some stuff doesn't change, and old info is as valuable today as in the past.)

I'm thinking about reprising some of those key posts (and articles and presentations) from the past, to help increase the chance of people finding them (versus solely by searching). :-)
# Posted By charlie arehart | 1/28/16 1:51 PM
charlie arehart is my hero of the day:

"reprising some of those key posts (and articles and presentations) from the past, to help increase the chance of people finding them"

What a great idea m8, people like you is what makes the internet great :)
# Posted By Baurits Lertelsen | 1/31/16 12:23 AM
I've been looking for a way to log DOS console session output to a log file, much the same as you can with all and sundry SSH clients, too. I tried this solution but it only seems to store the commands you enter, not the resultant output from it.
However, I just found that you can log all session output in Powershell using the "Start-Transcript" cmdlet:
https://technet.micr...

Maybe this is this best option (until something better comes along?). Another possible workaround is to install an SSH Server on your Windows box and open an SSH connection to "localhost"? (But I think that's a bit much since Powershell is already part of most Windows deployments now.)
# Posted By stevo | 10/8/16 2:53 AM
Thank you!
This is still helping people.
# Posted By batya | 7/2/17 3:30 AM
Hi Charlie,
What I am looking for is to save the commands and the output on the fly?
So to build a history just like putty, in there you have the option to save all commands and output on the fly to the trace/log file.
Is there such a tool available?

Thank you.
Regards,
Jerry
# Posted By Jerry | 10/1/17 6:39 AM
Hi Charlie,
What I am looking for is to save the commands and the output on the fly?
So to build a history just like putty, in there you have the option to save all commands and output on the fly to the trace/log file.
Is there such a tool available?

Thank you.
Regards,
Jerry
# Posted By Jerry | 10/1/17 6:39 AM
Jerry, it does not seem possible. See others asking and debatnig options, all fruitless, at https://stackoverflo... Don't worry about it being "in a bat". The discussions apply as well to just bring at command line, and the solutions that were suggested failed for me when I tested them, to do what you seek.

If you (or any reader) may ever find a solution for that, share it here. Seems others seek it also. :-) And this blog post (mine, here) is showing up as a top one on this topic of saving output of command line history, so others may find it and any additional info shared here on your need. I've never needed it, but I see the value.
# Posted By Charlie Arehart | 11/11/17 11:38 AM
Hey, Jerry, as an update to my last comment: you CAN get what you want (a transcript of your command input AND output), at least if you use Windows PowerShell instead. I have just updated the blog post to discuss that at the end, and its available Start-Transcript, which will log both the input and output. (I also updated the top to show how to get JUST the command history in PowerShell.)

The transcript feature is worth looking into, even if you may not be a user of PowerShell. Sometimes you can do exactly what you do at the Windows/DOS command prompt, in PowerShell. (And sometimes you can't, but it's worth learning to deal with the differences, and to embrace the many, many, many powerful advantages of PowerShell over the command prompt.) But I realize many will cling to the simpler cmd for a long time, and so I hope this post may help folks of either stripe.
# Posted By Charlie Arehart | 11/17/17 8:00 AM
Still helping out...8 years later!! Thanks!
# Posted By Ranjeet | 4/10/19 7:10 AM
Thanks, Ranjeet. Happy to help: and yep, even old content can still be great content--especially when it's about something so many people don't know or might not ever even fathom. :-)
# Posted By charlie arehart | 4/10/19 9:27 AM
Copyright ©2020 Charlie Arehart
Carehart Logo
BlogCFC was created by Raymond Camden. This blog is running version 5.005.
(Want to validate the html in this page?)

Managed Hosting Services provided by
Managed Dedicated Hosting