このバグは既に改修されているようですが、当時はほんとに開いた口がふさがりませんでした。
なにしろ整理しようとファイルを移動していざ中身を確認しようとしたら消えているわけなので、ただ削除したのと変わらないとかありえません。
で、修復したファイル群ですが、ディレクトリ情報が破損しているようで最初に見たときは何がなんだかわかりませんでしたが、ファイル名はなんとか救えていたことです。
フォルダ名が全く別物になっているものがほとんど。
これらのファイルはただのTV録画(I-O DATA mAgicTV)で当時まったくテレビを見る時間がなかったのでかなり取り溜めています。
ファイル構成が比較的簡単で、ファイル名からフォルダ名を復元できれば…と、最初は手作業でやっていましたが、やはりスクリプトで一気に変換ができたら楽かなと。
とにかくファイルが消えてしまうのが一番嫌なことなので比較的シンプルかつ、トライアンドエラーで手作業に近いことができればと、こんなスクリプトを見よう見真似で作ってみました。
Option Explicit実行する際にはコマンドラインから(SetFolderName.vbと保存した場合)
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)
cscript SetFolderName.vbsとして実行します。
も しフォルダ名が変更できない場合(すでに同じフォルダ名がある場合)はエラーが出て止まりますので、"[ ]"内の既存のフォルダ名をみつけて適当に"[1]"とかつけて一時的に名前を変えて再度実行。そしてエラーがなくなるまで実行すれば元に近いフォルダ名 がつけられているといった感じです。
まぁ、エラー処理とか自動化するよりは止まってもらって判断するのがいいかなと(笑)
応用としてフォルダがなくなってごちゃ混ぜになっているファイルは、.gno と .mpg を 新しいフォルダ にでも小分けしてスクリプトを流すだけできちんとフォルダ名が設定されるという感じです。
関係ないですけど、このことが原因で私はさらにbuffaloは嫌いになっています。
0 件のコメント:
コメントを投稿