2005/02/27(日)きょう作成したファイルをコピーするVBS
画像ファイルをコピーする時にはバッチファイルを使っていたが、VBSで書くと、こんな感じか。「Windows Script Hostハンドブック」を参考にした。画像だけでなく、すべてのファイルが対象。
'jpgcopy.vbs Set Obj = CreateObject("Scripting.fileSystemObject") Set JpgFldr = Obj.GetFolder("C:\homepage\photo\") count = 0 For Each F In JpgFldr.Files If InStr(CStr(F.DateCreated),CStr(Date)) = 1 Then F.Copy "D:\homepage2\photo\" count = count + 1 End If Next If count = 0 Then MsgBox "今日作成したファイルはありません。" else MsgBox "今日作成したファイルを" & count & "個コピーしました。" End If
VBSは実行するたびにウィルスソフトが反応する。ノートン・アンチウィルスの場合はスクリプトを書き換えたら、別のスクリプトと解釈するためか、警告のダイアログが頻繁。VBSで実行されるウィルスが多いので仕方がないが、そういう意味では使いにくいスクリプトだな。
2004/10/28(木)自動で名前を付けて保存するマクロ
秀丸で編集中のファイルに名前を付けて保存するのが面倒な時、自動で名前を付けて保存するマクロを考えてみた。日付をファイル名にすることも考えたが、紙2001のようにファイルの先頭にある文字列(先頭から半角16文字。全角だと8文字)でファイル名を付けると、ファイルの内容が分かるので便利だろう。
//autosave.mac $dir = "C:\\temp"; if(basename == ""){ gofiletop; replacedown "\n","",regular; #result = result; selectline; $text = gettext(seltopx,seltopy,selendx,selendy); if(#result == 1){undo;} if($text == ""){ message "このファイルには何も書かれていません。\n保存できません。"; endmacro; }else{ #text = strlen($text); if(#text % 2 != 0){ $text ="1" + $text;} $basename = leftstr($text,16); $filename = $dir + "\\" + $basename + ".txt"; saveas $filename; } } endmacro;
先頭から16バイトまでに半角と全角が混じった文章で半角が奇数個の場合、拡張子.txtの付いたファイル名が付けられない。具体的には“「デビルマン」”というタイトルが1行目にあると、“「デビルマン・txt”と、ピリオド“.”ではなく、全角のナカテン“・”が付いたファイル名になってしまう。が7バイトなので、16バイト目の文字の半角分だけ取ろうとするからだ。仕方がないので、そういう場合は先頭に半角の1を付け加えて半角文字が偶数になるようにした。
一昨日書いたtDiary入力補助マクロの最初の部分に付け加えると吉か。ただし、日記によくあるリンクになっているタイトルの場合はファイル保存ができない。<<a href="http;//…なんていう文字列はファイル名には使えませんね。ここを改良する必要があります。
で、そういう場合は日付+時間をファイル名にすることにした(いい加減な対応)。結局、サブルーチンを入れて長くなってしまった。改良版はautosave.mac.txtを参照。
秀丸ホームページのマクロライブラリを見てみたら、同じ趣旨のマクロが既に登録してあった。名前を付けて保存マクロ改。やっぱりね。内容か日付かでファイルを保存するところまで同じ。ま、僕のマクロはtDiary用ということで。