読者です 読者をやめる 読者になる 読者になる

黒縁眼鏡は海を飛ぶ

IT中心にそこはかとなく

ディレクトリとファイルの一覧を作れと言われた話

Windows

新しいプロジェクトは力押しの筋肉案件だった

新しいプロジェクトにアサインが決まり、ちょっとした僻地で働き始めました。
当初の説明では商用ツールの保守という話だったのですが、蓋を開けてみれば全くできていないデザインシートをひたすら整備するというゴリ推し感溢れる作業現場でした。

とりあえずディレクトリとファイル一覧作っといて

ということでWindowsサーバ数台分のファイル構成一覧を作ることになりました。
DOSコマンドをあまり使ったことがなくて、ディレクトリとかファイルの一覧をガバっと吐き出すといえばdirtreeしか知りませんでした。
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で回そうとすると動いてくれなくて)

できたのはいいんですけどお客さんにまだ見せてないので、あとは承認が降りるのを祈るばかりなのでした。