I am looking for a way to take a screenshot of the entire screen from the command line. Operating system is Windows. Something like this:

C:\>screenshot.exe screen1.png
  • 1
    Why would you want to do something like that ? Apart from the obvious deficiency (it being able to take screenshots only of the command line you're currently working on), what's wrong with the "regular" solutions for such purpose ? – Rook Nov 26 '09 at 15:53
  • 8
    Why would it be restricted to take a picture of the cmd line only? I think the question goes more along the lines of automation. – Gerd Klima Nov 26 '09 at 15:57
  • Well, in the moment he wants to take a screenshot, he has to press enter to give the command, doesn't he ? He could of course use a script to time-activate it, but then he's really reinventing hot water. – Rook Nov 26 '09 at 16:00
  • I would like to write a script that opens eml file in Thunderbird, takes a screen shot, opens another file, takes another screen shoot... For all files in a folder. I want to execute screen shot tool from the command line, so it could be automated. Just to be clear, I do not want to take a screen shot of command line, but of the entire screen. In fact, I have already written the script, I am just looking for more options to take the screen shot. – Željko Filipin Nov 27 '09 at 11:10
  • 2
    @Idigias: first of all, the screen is larger than a CMD box, but secondly : when a script launches a GUI tool, that GUI tool takes focus. So, your "obvious deficiency" is not obvious, and no deficiency either. Have you ever worked with command line ? – tvCa Apr 13 '15 at 9:49

11 Answers 11


Download imagemagick. Many command line image manipulation tools are included. import allows you to capture some or all of a screen and save the image to a file. For example, to save the entire screen as a jpeg:

import -window root screen.jpeg

If you want to use the mouse to click inside a window or select a screen region & save a a png, just use:

import box.png
  • 15
    This doesn't seem to work on Windows. I get an X server error about file not found. – Binary Phile Apr 5 '11 at 18:14
  • 2
    @BinaryPhile Yea I think this would only work with an X server running on Cygwin. – CMCDragonkai May 12 '14 at 8:42
  • It still doesn't work for me. I get a screenshot, but only the X applications show up (as expected). – reinierpost Oct 9 '15 at 13:11
  • hm, ImageMagick is 25 Mb, and does TON of cool stuff. screenCapture.bat, below, is 9 Kb, and simply does exactly what the OP requested. At .04% the size of ImageMagick. – johny why Apr 12 '16 at 0:59

This question's already been answered, but I thought I'd throw this in as well. NirCmd (freeware, sadly, not open source) can take screenshots from the command line, in conjunction with the numerous other functions it can do.

Running this from the command line either in nircmd.exe's directory or if you copied it to your system32 folder:

nircmd.exe savescreenshot screen1.png

does what you want. You can also delay it like this:

nircmd.exe cmdwait 2000 savescreenshot screen1.png

That will wait 2000 milliseconds (2 seconds), and then capture and save the screenshot.

  • Nircmd does not support multiple screens. It will capture the primary screen only. – Thomas Weller May 19 '15 at 8:58
  • 1
    Looks like the recent versions can do multiple screens. savescreenshotfull [filename] – w32sh Feb 26 '16 at 10:47
  • I couldn't find the download link for nircmd2 initially. Google search didn't show anything. For users looking to download nircmd2, the download link is located at the very bottom of the page nirsoft.net/utils/nircmd.html. You can directly use this download link: nirsoft.net/utils/nircmd.zip – alpha_989 Feb 1 '18 at 19:46

it can be done without external tools (you just need installed .net framework ,which is installed by default on everything from vista and above) - screenCapture.bat. It is a selfcompiled C# program and you can save the output in few formats and capture only the active window or the whole screen:

screenCapture- captures the screen or the active window and saves it to a file
screenCapture  filename.format [WindowTitle]

filename - the file where the screen capture will be saved
format - Bmp,Emf,Exif,Gif,Icon,Jpeg,Png,Tiff and are supported - default is bmp
WindowTitle - instead of capturing the whole screen will capture the only a window with the given title if there's such


call screenCapture notepad.jpg "Notepad"
call screenCapture screen.png
  • 3
    Definitely the best solution. Super-tiny 9K! That's 0.04% the size of ImageMagick (25 Mb). It uses built-in Windows functionality. Tinier than all other solutions on this page. Best! – johny why Apr 12 '16 at 1:01
  • 1
    One thing that I noticed about this solution is that there are specific things that it does not capture. For example, some applications are attaching themselves and creating huds on other applications that are not rendered in the captured image. In those extreme cases I found that MiniCap works. In most cases though, this solution right here is the fastest and most uncomplicated that you can find. – F1234k Sep 5 '16 at 22:40
  • Hi @npocmaka, I have two monitor that desktop is extended on them. I want to take screenshot of desktop of the second monitor. But your program just take screenshots from primary desktop. Any trick? – mini Mar 4 '19 at 14:02
  • @mini - you can edit the c# part of the script using this . I'll try to add add this at the weekend – npocmaka Mar 4 '19 at 19:41
  • @npocmaka, As I'm not familiar with C#, I'll be waiting for your update. Thanks a lot. – mini Mar 16 '19 at 5:38

Other suggestions are fine -- you could also try MiniCap, which is free and has some other features like flexible file naming and some different capture modes: http://www.donationcoder.com/Software/Mouser/MiniCap/index.html

(disclaimer: I'm the author of MiniCap).

  • 1
    Then you must also be the author of Screenshot Captor. I found it a better solution for my needs. Thank you! – jon3laze Aug 24 '12 at 20:50
  • 1
    It is free for personal use only. For commercial use, a license for Screenshot Captor is needed. – Thomas Weller May 19 '15 at 8:59

Try IrfanView.

You can run it via command-line. You can specify which window to capture – such as whole window or just the current/active window – and you can also do some basic editing such as sharpening, cropping or resizing the images.

Here are the command line options, particularly interesting is

i_view32 /capture=0 /convert=wholescreen.png
  • I've using IrfanView for years, never know it could do this. Thanks for sharing. – SparedWhisle Nov 27 '19 at 8:37

You can try the boxcutter tool:

usage: boxcutter [OPTIONS] [OUTPUT_FILENAME]

Saves a bitmap screenshot to 'OUTPUT_FILENAME' if given.  Otherwise, 
screenshot is stored on clipboard by default.

  -c, --coords X1,Y1,X2,Y2    capture the rectange (X1,Y1)-(X2,Y2)
  -f, --fullscreen            fullscreen screenshot
  -v, --version               display version information
  -h, --help                  display help message
  • This one supports multiple monitors but adds some extra black area in version 1.5 – Thomas Weller May 19 '15 at 9:19
  • For those interested in compactness, boxcutter is only 22K for the full-screen .exe and 502K for the regular .exe. It is open-source. Works great for me. – frakman1 Jan 31 '19 at 14:57

Screenshot-cmd takes a screenshot of a desktop or any window selected by window title. It is also possible to select rectangle to capture. The result is stored as a png file. (last update in 2011)

            Select window with this title.
            Title must not contain space (" ").
            Select window by it's handle
            (representad as hex string - f.e. "0012079E") 
            Crop source. If no WINDOW_TITLE is provided
            (0,0) is left top corner of desktop,
            else if WINDOW_TITLE maches a desktop window
            (0,0) is it's top left corner.
            Output file name, if none, the image will be saved
            as "screenshot.png" in the current working directory.
            Shows this help info.

Inspired by: http://blog.mozilla.com/ted/2009/02/05/command-line-screenshot-tool-for-windows/

  • 1
    This is open source, BSD license. Very simple and small - for me these are advantages. – Jarekczek Jan 24 '15 at 12:06

You can use the Pillow python library to take screenshots of the primary monitor

Step1: install Pillow:

pip install -user pillow

Step2: Take screenshots with the following code:

from PIL import ImageGrab
img = ImageGrab.grab()
  • 1
    First I tried the imagemagic solution, but when I've seen that piece of Python code, I tried it in an interactive Python CLI and a second later I was happy! Thx!! – domih Jul 30 '18 at 12:02

You can use commercial product snapit to take awesome screenshots from the command line.

  • 2
    This is now a commercial product, needs .NET and is not released for Windows 7++. The link given in the answer returns HTTP 404. – Thomas Weller May 19 '15 at 9:21
  • Yea the GitHub repo doesn't exist. – alpha_989 Feb 1 '18 at 19:25

On Windows, I managed using the tip from @zacharyliu. For laymen and for those who like portable things I easily did it using Cmder.

  1. Download Cmder. I use the portable version with full installation

  2. Extract Cmder

  3. Open the folder and enter the bin folder (in the same folder as the executable, if not, create one)

  4. Download the NirCmd files (link at the bottom of the page)

  5. Place the NirCmd files in the bin folder

  6. Open Cmder (if it is open restart it)

  7. Use the following code (Saves screenshots.png every 3 seconds 5 times in the C:\screenshots\MONTH-DAY-YEAR\ folder with HOURS-MINUTES-SECONDS.png name):

    cd C:\ && ([ -d screenshots ] || mkdir screenshots) && "nircmdc.exe" loop 5 3000 execmd "cd C:\screenshots\ && ([ -d ~$currdate.MM-dd-yyyy$ ] || mkdir ~$currdate.MM-dd-yyyy$) && nircmdc.exe savescreenshot C:\screenshots\\~$currdate.MM-dd-yyyy$\screenshot-~$currtime.HH-mm-ss$.png"
  8. Enjoy!

How it works, which date formats are supported, which image formats are supported, and other details:


You can use the powershell code found here:

function screenshot([Drawing.Rectangle]$bounds, $path) {
  $bmp = New-Object Drawing.Bitmap $bounds.width, >$bounds.height
  $graphics = [Drawing.Graphics]::FromImage($bmp)

  $graphics.CopyFromScreen($bounds.Location, [Drawing.Point]::Empty, $bounds.size)



$bounds = [Drawing.Rectangle]::FromLTRB(0, 0, 1000, 900)
screenshot $bounds "C:\screenshot.png"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.