2012年1月31日火曜日

修復したHDDの整理

以前Buffaloの外付けHDDを2台接続して付属のソフトをインストールして見事にバグでクラッシュしたHDDから引き上げたファイル郡がそのままだったので整理を行っています。

このバグは既に改修されているようですが、当時はほんとに開いた口がふさがりませんでした。
なにしろ整理しようとファイルを移動していざ中身を確認しようとしたら消えているわけなので、ただ削除したのと変わらないとかありえません。

で、修復したファイル群ですが、ディレクトリ情報が破損しているようで最初に見たときは何がなんだかわかりませんでしたが、ファイル名はなんとか救えていたことです。
フォルダ名が全く別物になっているものがほとんど。

これらのファイルはただのTV録画(I-O DATA mAgicTV)で当時まったくテレビを見る時間がなかったのでかなり取り溜めています。

ファイル構成が比較的簡単で、ファイル名からフォルダ名を復元できれば…と、最初は手作業でやっていましたが、やはりスクリプトで一気に変換ができたら楽かなと。

とにかくファイルが消えてしまうのが一番嫌なことなので比較的シンプルかつ、トライアンドエラーで手作業に近いことができればと、こんなスクリプトを見よう見真似で作ってみました。
Option Explicit

dim objFSO

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

Function FolderProc(objFolder)
    dim strResult
    dim strRetFileName
    dim objSubFolder, objFile
    dim intCount

    ' 再帰的にサブフォルダの処理を行う
    For Each objSubFolder In objFolder.SubFolders
        strRetFileName = FolderProc(objSubFolder)
        if strRetFileName <> "" then
            if strRetFileName <> objSubFolder.Name then
                WScript.Echo objSubFolder.Name & " [" & strRetFileName & "]"
                objSubFolder.Name = strRetFileName
            End if
        End if
    Next

    strResult = ""
    intCount = 0
    For Each objFile In objFolder.Files        if LCase(objFile.Name) = "thumbs.db" then
            objFile.Delete
        elseif LCase(objFSO.GetExtensionName(objFile)) = "gno" then
            intCount = intCount + 1
            strResult = objFSO.GetBaseName(objFile)
            if Mid(strResult, Len(strResult) - 2 + 1, 2) = "-0" then
                strResult = Mid(strResult, 1, Len(strResult) - 2)
            end if
        end if
    Next

    if intCount > 1 then
        strResult = ""
    end if

    FolderProc = strResult
End Function

dim objFolder
Set objFolder = objFSO.GetFolder("I:\Recuva\不明なディレクトリ")
FolderProc(objFolder)
実行する際にはコマンドラインから(SetFolderName.vbと保存した場合)
cscript SetFolderName.vbs
として実行します。
も しフォルダ名が変更できない場合(すでに同じフォルダ名がある場合)はエラーが出て止まりますので、"[ ]"内の既存のフォルダ名をみつけて適当に"[1]"とかつけて一時的に名前を変えて再度実行。そしてエラーがなくなるまで実行すれば元に近いフォルダ名 がつけられているといった感じです。

まぁ、エラー処理とか自動化するよりは止まってもらって判断するのがいいかなと(笑)

応用としてフォルダがなくなってごちゃ混ぜになっているファイルは、.gno と .mpg を 新しいフォルダ にでも小分けしてスクリプトを流すだけできちんとフォルダ名が設定されるという感じです。

関係ないですけど、このことが原因で私はさらにbuffaloは嫌いになっています。

0 件のコメント:

コメントを投稿