archive-photos の使い方
1. 目的
このスクリプトはデジカメで撮影した画像を自動的にハードディスクに保存する目的で
作成されました。インストールは手動で行わなければなりませんが、xyzzy を使い込んで
いれば特に難しいところはありません。
簡単なプログラムですが、本人は便利よく使っています。皆様もお気に召したら使ってみてください。
なぜ、このようなソフトを xyzzy LISP で書いたかというと、xyzzy はファイル操作のコマンドが充実
しているので、ほかの言語で書くより簡単に書けるからです。
2. 使用方法
2.1. 準備
2.1.1 xyzzy のカスタマイズ
- まず、archive-photos.l を/xyzzy/site-lisp/ にコピーしてバイトコンパイルします。
(byte-compile-file "./site-lisp/archive-photos.l")
- ".xyzzy" を以下のように編集します。
- import するシンボルに *photo-parent-dir*, *photo-removal-media*,
*photo-viewer*, *photo-file-type*, 及び archive-photos
を加えます。
(import '(ed::archive-photos ed::*photo-parent-dir*
ed::*photo-removal-media* ed::*photo-viewer* ed::*photo-file-type*))
- archive-photos が自動的にロードされるようにします。
(autoload 'archive-photos "archive-photos" t)
- *photo-parent-dir*, *photo-removal-media*, *photo-parent-directory*, *photo-viewer*,
及び *photo-file-type* を自分の PC にあわせて変更します。
まとめると、(もし、すでにインポートされているシンボルがなければ、)".xyzzy" に自分のシステム
にあわせて以下のように記述して下さい。また、ソースコードを直接変更してもかまいません。
(import '(ed::archive-photos ed::*photo-parent-dir* ed::*photo-removal-media*
ed::*photo-viewer* ed::*photo-file-type*))
(setq *photo-parent-dir* "C:/doc/"
*photo-removal-media* "G:/"
*photo-viewer* "C:/linar160/linar.exe"
*photo-file-type* '("*.bmp" "*.jpg" "*.jpeg" "*.tiff" "*.png" "*.gif" "*.avi"))
(autoload 'archive-photos "archive-photos" t)
- 最後に、ダンプファイルを削除して、xyzzy を立ち上げます。
2.1.2 バッチファイルとショートカットの作成
xyzzy の実行ファイルが "C:\xyzzy" にあるとすると、
C:\xyzzy\xyzzycli.exe -f archive-photos
と記述したバッチファイルを作成し、それを(パスの通っている)ディレクトリに保存します。
("C:\xyzzy" の部分は各自のシステムに合わせて適宜変えて下さい。)
ディスクトップ上にそのバッチファイルのショートカットを作り、実行時の大きさが最小
になるように設定します。(アイコンを右クリック->プロパティ->実行時の大きさ-> 最小化)
また、写真の保存らしいアイコンに変更します。
(アイコンを右クリック->プロパティ->アイコンの変更)
終了すると右図のような状態になります。
2.2 実行
画像が入っているメディアをドライバーに挿入して、"写真保存アイコン" をダブルクリックします。
すると、メディアに保存されている画像ファイルが自動的にハードディスクに移動します。
進行状況は xyzzy のメッセージウィンドウ(左下の小さな部分)に表示されます。
準備は多少めんどくさいのですが、実行はとっても簡単です。
3. 仕様
3.1. 概説
ハードディスクにある画像を上書きしないようにするため、
また、確実にコピーされたことを確認するために以下の動作をします。
- リムーバルメディアのディレクトリのなかから、
画像データのあるディレクトリを選び出し、そのリストを作ります (以下 dirs-from とします)
- *photo-parent-dir* で定義されたディレクトリの下に実行時の日付の年ー月の名前のディレクトリを探し、
なければ作成します。
例えば、2004 年 8 月 ?? 日に実行された場合、"*photo-parent-dir*\04-08\"
というディレクトリを探すか作成するかします。(以下 dir-root とします)
- dir-root の下に photoNN (N= 0--9) の名前のディレクトリがあるか探し、
NN の最大値 (NN-max) を求めます。
- リスト dirs-from の中のディレクトリ (以下 d-from) それぞれについて、以下のことを行います。
- "photo(1 + NN-max)" (以下 d-to) という名前のディレクトリを作成し、
d-from の中の画像ファイルを d-to にコピーします。
- d-from と d-to にあるファイルを比較して全て等しければ d-from にあるファイルを削除します。
- 全ての d-from について 4. が修了したら、dirs-from の最初のディレクトリ
を引数としてイメージビュアーを立ち上げます。
3.2. 例
以下 *photo-parent-dir* = "d:/doc/", 保存日 2004 年 8 月 ?? 日とします。
すると、dir-root は "d:/doc/04-08/" となります。
リムーバルメディアのなかの画像ファイルのあるディレクトリを /imag-1, /imag-2, /imag-3 とし、
"d:/doc/04-08/" の中にはすでに /photo1, /photo2, /photo3, /photo4, /photo5 のディレクトリが存在するとします。
このとき、スクリプトの動作は、
- image-1 に対して /photo6 を作成し、コピー、チェック、メディアのファイルの削除を行います。
- image-2 に対しては、/photo7 を作成し、以下同様の操作を行います。
- image-3 には /photo8 を作成し、以下同様。
- 最後に /photo6 を引数としてビュウアーを立ち上げます。
4. まとめ
以上に述べたように設定は少し込み入っていますが、
特に難しいところはありません。一度、設定してしまえば便利この上なく使えます。
私はビュウアーには Linar を使っていますが、
高機能でかつ使いやすいフリーのビュウアーです。もし、お気に入りのビュアーがディレクトリを引数
にとれなければ *photo-viewer* は nil にセットして下さい。(この場合ファイルの移動のみを行い、
ビュアーは立ち上がりません
もし、お気に入ったら使ってみてください。
不具合、要望などはお気軽に紫藤にご連絡ください。