テンプレートファイルを開いているフォルダにコピー(回りくどいけど楽に安全に)
報告書やら提案資料やらの雛形ファイルを作業中のフォルダにコピーしてくる場合。
これまでは、雛形ファイルをまとめて置いてあるフォルダを開き、必要なファイルの上で右クリック->コピーしてから作業フォルダの中で右クリック&貼り付けていた(ドラッグ&ドロップは苦手)。
が、うっかりコピーではなく切り取りを選んでしまって雛形を作り直すことがしばしば。
理想としてはフォルダ背景のコンテキストメニューにある新規作成から雛形ファイルを選びたい。
が、実現しようとすると、雛形ごとに拡張子を分ける必要があったり、雛形が増えるたびにレジストリに追加したりと不便が多い。
何よりも雛形の置き場所とファイル名に自由が少ない。
FileMenuToolsも入れてみたが、CopyToがあるのにCopyFromがなくて適わず。
試行錯誤した末、作業フォルダにダミーファイルを作って雛形ファイルの呼び水役にすることで、とりあえず落ち着いた。
ファイル選択ダイアログを開いて作業フォルダにコピーするツールをダミーファイルの拡張子に関連付ける。
Windows XPとWindows 7を併用しているためファイル選択ダイアログを開くのも一筋縄ではいかず(cf. JScript on WSHでファイル選択ダイアログを表示する方法のまとめ - 新・日々録 by TRASH BOX@Eel)、ActivePerl 5.8についてきたPerl/Tkで作った。
ActivePerl 5.10からはPerl/TkのバンドルがなくなってTkxだそうだがこちらは未確認。
ともあれ、copy_template.plを作成。
以下、C:\tool\copy_template直下に作成したものとして進める。
#!/usr/bin/perl -- use utf8; use strict; use Encode; use Tk; use File::Basename; use File::Copy; # 雛形ファイルの置き場。 # セパレータは\\にしないと動作しない。 # 末尾の\\がないと2回目以降最後に開いたフォルダが開かれてしまう。 my $TemplateDir = "C:\\home\\templates\\"; my $target_dir = dirname($ARGV[0]); my $top = new MainWindow; $top->withdraw; my $template_file = $top->getOpenFile(-initialdir=>"$TemplateDir", -title=>'コピーするテンプレートを選択'); if($template_file) { copy(encode('cp932', $template_file), encode('cp932', $target_dir)); } # EOF
ラッパとなるバッチファイルcopy_template.batを同じフォルダに作成。
pushd %~dp0 start wperl copy_template.pl %*
コマンドプロンプトから、ダミーファイルの拡張子を.templateとしてバッチファイルに関連付け。
UACが有効な場合はコマンドプロンプトを管理者として実行する必要がある。
> ftype TemplateFile="C:\tool\copy_template\copy_template.bat" "%1" TemplateFile="C:\tool\copy_template\copy_template.bat" "%1" > > assoc .template=TemplateFile .template=TemplateFile >
レジストリエディタで.templateファイルを「新規 Template」として新規作成メニューから作成できるように登録。
\HKEY_CLASSES_ROOT\.templateの直下に新規キー「ShellNew」を作成。
更に「ShellNew]の直下に文字列キーを作成、名前を「NullFile」にする。
\HKEY_CLASSES_ROOT\TemplateFileの「規定」のデータを「Template」に変更。
これで設定完了。
作業用に開いているフォルダ背景で右クリック->新規作成->Templateを選ぶと「新規 Template.template」が作成される。
「新規 Template.template」をダブルクリックすると、C:\home\templatesを初期フォルダとしてファイル選択ダイアログが開く。
ダイアログでコピーしたい雛形ファイルをダブルクリックすれば、作業フォルダにコピーされるはず。
雛形が増えてきたら雛形置き場にサブフォルダを作ってもよいし、別のフォルダへのショートカットを置いても良い。
2011/12/11 Perl/Tk版作成
Perl/Tkx版テンプレートファイル選択ダイアログ - Toolbox