【bat】バッチファイルでスクリーンショットを自動保存する方法(nircmd併用)

【bat】バッチファイルでスクリーンショットを自動保存する方法(nircmd併用) bat

Windows標準のバッチファイルだけではスクリーンショットを直接撮影する機能はありませんが、外部ユーティリティを併用することで自動保存が可能になります。代表的なのが「NirCmd」という小型のコマンドラインツールです。バッチから呼び出すだけでデスクトップ全体やアクティブウィンドウをキャプチャし、PNGやJPG形式で保存できます。ここではnircmdを使ってスクリーンショットを自動保存する方法を解説します。

NirCmdの導入

NirSoft公式サイトから「nircmd.exe」をダウンロードし、任意のフォルダに配置します。PATHを通すか、バッチファイルと同じディレクトリに置いて呼び出せば利用できます。管理者権限は不要で、実行するだけで動作します。

基本的なスクリーンショット保存

デスクトップ全体をキャプチャしてPNG形式で保存する例です。

@echo off
setlocal

set "OUTDIR=%USERPROFILE%\Pictures\Screenshots"
if not exist "%OUTDIR%" mkdir "%OUTDIR%"

set "FILE=%OUTDIR%\screenshot.png"

nircmd.exe savescreenshot "%FILE%"

echo スクリーンショットを保存しました: %FILE%

endlocal
pause

日付・時刻を付けて自動保存

複数回の実行で上書きされないように、ファイル名に日付や時刻を付けて保存します。

@echo off
setlocal

set "OUTDIR=%USERPROFILE%\Pictures\Screenshots"
if not exist "%OUTDIR%" mkdir "%OUTDIR%"

set "DATESTR=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%"
set "DATESTR=%DATESTR: =0%"
set "FILE=%OUTDIR%\screenshot_%DATESTR%.png"

nircmd.exe savescreenshot "%FILE%"

echo 保存しました: %FILE%

endlocal
pause

特定領域だけをキャプチャ

savescreenshotfull の代わりに savescreenshotrect を使うと、指定した座標の矩形領域をキャプチャできます。座標は左上X,Yと右下X,Yを指定します。

@echo off
setlocal

set "OUTDIR=%USERPROFILE%\Pictures\Screenshots"
if not exist "%OUTDIR%" mkdir "%OUTDIR%"

rem 例: 左上(100,100)~右下(600,400)の領域を保存
nircmd.exe savescreenshotrect 100 100 600 400 "%OUTDIR%\partial.png"

echo 部分キャプチャを保存しました。

endlocal
pause

アクティブウィンドウだけをキャプチャ

作業中のアプリ画面だけを保存する場合は savescreenshotwin を使います。

@echo off
setlocal

set "OUTDIR=%USERPROFILE%\Pictures\Screenshots"
if not exist "%OUTDIR%" mkdir "%OUTDIR%"

nircmd.exe savescreenshotwin "%OUTDIR%\active.png"

echo アクティブウィンドウを保存しました。

endlocal
pause

定期的にスクリーンショットを撮る

ループとtimeoutを組み合わせれば、数秒おきに自動保存が可能です。

@echo off
setlocal

set "OUTDIR=%USERPROFILE%\Pictures\Screenshots"
if not exist "%OUTDIR%" mkdir "%OUTDIR%"

for /l %%i in (1,1,5) do (
    set "DATESTR=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%"
    set "DATESTR=!DATESTR: =0!"
    nircmd.exe savescreenshot "%OUTDIR%\auto_%%i_!DATESTR!.png"
    timeout /t 10 /nobreak >nul
)

echo 自動キャプチャを終了しました。

endlocal
pause

この例では10秒ごとに5回キャプチャします。

まとめ

nircmd.exeを使えばバッチファイルから簡単にスクリーンショットを保存できます。日付入りファイル名で履歴を残したり、部分領域やアクティブウィンドウだけを保存したり、ループで定期キャプチャするなど用途に応じた自動化が可能です。バッチファイルに組み込むことで、操作ログや監視の効率化に役立ちます。