概要
スマホやカメラで撮影した写真をSDカードからパソコンに取り込む作業は、
手間だと感じる方も多いのではないでしょうか。
私も毎回だと面倒に感じることが多かったため、
Windowsのバッチファイルを活用した自動化スクリプトを作成しました。
このスクリプトは、以下の機能を提供します。
① ローカルに保存してない画像の自動コピー
ダブルクリックで、指定した外部機器のフォルダから指定した拡張子の画像ファイルを
ローカルの指定フォルダへコピーします(すでにある画像は回避)。
② Photoshopでの自動オープン
コピーした画像のみをPhotoshopで自動的に開きます。
バッチファイルのコード
以下が実際のバッチファイルのコードです。
@echo off
setlocal
:: SDカードなどの外部機器のドライブを設定(以下の例はD。自分の接続する機器により変更。)
set sd_card_drive=D:\
:: 外部機器で画像が存在するパスを設定
set sd_folder=D:\撮影画像
:: 取り込む画像の拡張子を選択(カンマ区切りで増減可能)
set target_extensions=*.jpeg *.jpg *.png
:: コピー先のローカルフォルダを設定(環境変数を用いてデスクトップ上の「写真保管庫」を指定)
set local_folder=%USERPROFILE%\Desktop\写真保管庫
:: Photoshopのパスを設定(自分がインストールしている環境に応じて調整してください)
set photoshop_path="C:\Program Files\Adobe\Adobe Photoshop 2024\Photoshop.exe"
:: コピーされたファイルのリストをファイルに保存
set copied_files=%temp%\copied_files.txt
del /f /q "%copied_files%" 2>nul
:: 外部機器が接続されているか確認
if exist "%sd_card_drive%" (
:: コピー元フォルダが存在するか確認
if exist "%sd_folder%" (
:: JPEG, JPG, PNGファイルのコピーを開始
for %%e in (jpeg jpg png) do (
dir /b "%sd_folder%\*.%%e" > %temp%\filelist.txt
for /f "delims=" %%f in (%temp%\filelist.txt) do (
if not exist "%local_folder%\%%f" (
copy "%sd_folder%\%%f" "%local_folder%" > nul
echo "%sd_folder%\%%f" >> "%copied_files%"
)
)
)
:: コピーされたファイルをPhotoshopで開く
for /f "delims=" %%f in (%copied_files%) do (
if exist "%%f" (
start "" %photoshop_path% "%%f"
)
)
)
)
endlocal
exit
- メモ帳などで記載したあと、拡張子を.batにして保存してください。
(文字コードの形式にご注意ください)
検証
画像の用意
下記のようにローカルと、外部機器の差分が2枚ある状況にしました。
この状況でローカルにない2枚だけを取り込み、photoshopで開けば成功です。
バッチファイルの実行
基本的にはどこでも良いので、
先ほどのコードを記載したバッチファイルを置いて、
ダブルクリックで実行します。
実行結果
無事にPhotoshopで転送した画像のみを開いてくれました!
保存もされています。
ちなみに転送した画像は、
%temp%\copied_files.txt
にリストとして記載されています。
"D:\撮影画像\猫に小判のイラスト.jpg"
"D:\撮影画像\秋田犬のイラスト.png"
なお、すべての画像がローカルにある状態でクリックしても
想定通り何も起きませんでした。
今後の展望
本来は外部機器が接続されたら、自動で実行されるようにしたい!
しかし、なぜか外部機器が接続されたイベントログをイベントビューアーのWindowsログで確認できず、
イベントIDもわからなかったため、タスクスケジューラにトリガーを指定が難しく…。
トレーサーを設定し直してみてもイベントがやはり入ってこなかったのですが、
何かを見返したら問題解消できるかも?
深みにハマりかけてますが、画像編集は気分が乗らないと中々やる気にならないので
少しでも動き出しの負担を軽くしたい…!