ディレクトリとファイルの一覧を作れと言われた話
新しいプロジェクトは力押しの筋肉案件だった
新しいプロジェクトにアサインが決まり、ちょっとした僻地で働き始めました。
当初の説明では商用ツールの保守という話だったのですが、蓋を開けてみれば全くできていないデザインシートをひたすら整備するというゴリ推し感溢れる作業現場でした。
とりあえずディレクトリとファイル一覧作っといて
ということでWindowsサーバ数台分のファイル構成一覧を作ることになりました。
DOSコマンドをあまり使ったことがなくて、ディレクトリとかファイルの一覧をガバっと吐き出すといえばdir
かtree
しか知りませんでした。
tree /F
でドカーンとテキストに出力してExcelに貼り付けてみっところ、どの階層だろうが何のファイルだろうがA列のセルに全て張り付くという悲劇的な当たり前が起き、自動アウトライン作成とかでなんちゃって階層表現を心みるも失敗してしましました。なんなの。
仕方がないので手で一生懸命グループ作って、やっと1ドライブ分完成させたのですが、この時6時間経過。バカなの?死ぬの?
しかもtree
をそのまま貼り付けているせいで見た目が悪すぎ、かつ保守性0というゴミがこの世に生まれました。おぎゃー。
救世主現る
ファイルは一旦無視してディレクトリだけtree
で吐き出し、メモ帳でせこせこタブに変換とかすればとりあえずExcel側では綺麗にできるかなとも思ったのですが、そうすると数千数万のファイル達を目視で確認しながら順次追加していかなければならないとかいうこの世の地獄をむかえてしまうことに気づいて諦めました。
もうどうにでもな〜れ☆と適当にググっていたら、見つけました。第三のコマンドattrib
。
attrib
attrib
だけ叩くと、カレントディレクトリのファイルをフルパスでガバーっと表示します。
これに/S /D
オプションをつけてあげると、ディレクトリと配下のサブディレクトリ及びファイルをフルパスで表示してくれるようになります。(頭に属性がついてくるのでちょっと邪魔)
あとは正規表現とか使って¥をタブに変えたりして、Excelに貼り付ければあら不思議、見やすい一覧の完成です。
VBAの出番
ファイル構成表って、行でフルパスを表現するために所属しているサブディレクトリやファイルの前のセルにも親ディレクトリの名称を埋めて白字にされてることがままあります。(C:¥userとかならC:¥が白字)
ファイル数が多くなるとこの作業はとても手ではできないので簡単なVBAスクリプトを書きました。生まれて初めてVBA書きました。
Sub test() i = 1 n = 1 b = Worksheets("Sheet1").Cells(i, n).Value Do While i < 60000 If Worksheets("Sheet1").Cells(i, n) = b Then Worksheets("Sheet1").Cells(i, n).Font.ColorIndex = 2 Else b = Worksheets("Sheet1").Cells(i, n).Value End If i = i + 1 Loop End Sub
何してるってもうセルの内容比較して同じなら白字に、違うならbに比較先のセルをぶちこんで永遠に回すということをしています。
その場しのぎにしてはうまく動いてくれました…いちいちnを自分で直さないといけませんが…(なぜかnもDo While
で回そうとすると動いてくれなくて)
できたのはいいんですけどお客さんにまだ見せてないので、あとは承認が降りるのを祈るばかりなのでした。