はじめに
最近、古いパソコンのデータをバックアップしています。
長年使っているパソコンなので、ファイルもフォルダもかなりの数があります。
今回はBlu-rayにバックアップする前に、いったんアーカイブして整理しておこうと思ったのですが、そこでちょっと困ったことがありました。
空のフォルダが、とにかくたくさんある。
小さなファイルが大量に入っているフォルダも大変なのですが、空フォルダもアーカイブするときには少々扱いづらい。
そこで調べてみると、
「空フォルダを検索して削除する」
というツールは結構見つかります。
ただ、今回やりたかったのは逆でした。
空フォルダは消したくない
空フォルダにも、ちゃんと意味があります。
昔使っていたフォルダだったり、今後ファイルを入れるために作っておいたフォルダだったりします。
バックアップのためとはいえ、
「空だから削除する」
というのはちょっと違う。
そこで考えたのが、
空フォルダは残す。
ただし、本当に何も入っていない状態にはしない。
という方法です。
つまり、
empty folder
↓
empty.txt を1個置く
↓
archive / backup
これだけです。
空フォルダは消したくない。じゃあ、何か置けばいい。
考えてみれば単純な話でした。
空のフォルダを見つけたら、その中に
empty.txt
を作る。
これならフォルダそのものは削除しません。
既にファイルが入っているフォルダにも何もしません。
サブフォルダがある場合も、そのフォルダ自体は空フォルダではないので対象外です。
今回はこの処理をExcel VBAで作ってみました。
処理の流れ
やっていることは、かなり単純です。
- 対象となるフォルダを選択
- そのフォルダ以下を再帰的に検索
- ファイルが存在しないか確認
- サブフォルダが存在しないか確認
- 本当に空なら
empty.txtを作成 - その下のフォルダも同じように検索
Excel VBAからファイルシステムを扱うので、FileSystemObject を使っています。
Option Explicit
'============================================================
' Excel Empty Empty
'
' 空フォルダに empty.txt を作成するツール
'
' ・指定フォルダ以下を再帰的に検索
' ・ファイルもサブフォルダも存在しないフォルダを対象
' ・対象フォルダに empty.txt を作成
' ・既存ファイル、既存フォルダは変更・削除しない
'
' Excel 2007 / VBA 6.5 対応
'============================================================
Public Sub CreateEmptyFolderMarker()
Dim FSO As Object
Dim RootFolder As Object
'--------------------------------------------------------
' FileSystemObject
'--------------------------------------------------------
Set FSO = CreateObject("Scripting.FileSystemObject")
' 以下、対象フォルダを選択して処理します。
End Sub
実際の処理では、選択したフォルダを起点にして、サブフォルダを再帰的にたどっていきます。
「削除」ではなく「変換」
今回ちょっと面白いと思ったのは、同じ空フォルダでも考え方を変えると処理が変わることです。
一般的な空フォルダ削除ツールなら、
空フォルダ
↓
削除
です。
今回作ったものは、
空フォルダ
↓
empty.txt を追加
↓
フォルダ構造を残す
です。
目的が違うだけで、必要になるツールも変わります。
たぶん、もっと探せば「空フォルダにテキストファイルを自動で置く」ようなツールもあると思います。
ただ、今回必要だったのは、
「空フォルダを削除する」ではなく、「空フォルダを残したままアーカイブしやすくする」
ことでした。
そこで、探すより作ることにしました。
バックアップをしていて思ったこと
今回、バックアップ作業をしていて、あらためて感じたことがあります。
パソコンは何十年も使っていて、何世代もの機種を引き継いできました。
その間に、ファイル管理ツールもバックアップツールも、ずいぶん増えました。
それなのに、
「あれ、この作業をするための小さな道具がないな」
ということが、まだあります。
今回必要だったのも、ものすごく高度なツールではありません。
ただ、
空フォルダを消したくない。
でも、そのままではアーカイブしづらい。
という、ちょっとした隙間を埋めるだけのツールでした。
こういうとき、Excel VBAは意外と便利です。
おまけ
普段使っているツールでは、
- WizTree
- WinMerge
あたりも、こういうバックアップ前の整理ではかなり役に立っています。
WizTreeで容量の大きい場所を探して、WinMergeでフォルダの中身を比較して、必要なら今回のような小さなVBAツールを作る。
大げさなバックアップシステムを作るほどではないけれど、
「今ちょっと困っている」
というところをExcelで埋める。
こういう使い方も、Excel VBAの面白いところだと思います。
この程度の小さなツールなので、必要な方がいれば続きを掲載します。