PC Recovery Memo トップ

フォーマット後のファイル復旧 2

ワード文章 docファイル

 

それまでに楽曲のコード譜(歌詞とコード名を書いた譜面)を大量に(千数百枚)を作っていたのが、不注意から消してしまった。

フォーマット後の復元で、かなりの数のワード文章が復元できたが、リカバリーソフトでのSurface Scanでの復元なのでファイル名がハードディスクのトラック位置らしき数字になっていて、そのままでは利用できない。

 

当初は1つずつ開いては中身を確認し、楽曲の名前でそのファイルの名前を書き直ししていたが、作業効率はとても低い。

 

ネットでソフトを検索してみると、複数のワードの中身のテキストのリストを作成してくれるようなありがたいものは見つからなかったが、WSHを使って任意のdocファイルの中身、テキストを表示してくれるスクリプト例が見つかった。

ワードのテキスト部分はパラグラフという配列に収められていて、それを表示してくれるものだった。

 

そのスクリプトはJScriptで書かれていたが、WHS下で使う場合場合にコマンド数が豊かなVBScriptに置き換えて、     

  任意のフォルダ内のファイルを取得

  docファイルのパラグラフを取得

するものを作ってみた。

 

コード譜の曲名は、作った時期で違うが、先頭か、2番目か、3番目に書いているので、この3つを取り出して眺めてみれば、歌詞カードであることがほぼ分かる。

 

このようにして、

  現ファイル名

  曲名

のリストが得られれば、フォルダ内のファイルの名前を別リストに作成した名前に一括置換してくれるソフトがあるので、それを使えば一挙に曲名のファイル名にすることができるが、問題が2つある。

 

1つは、以前、そのファイルをコピーしていると、コピーした同じファイルも復元されが、それぞれに同じファイル名を付けるわけにはいかない。だから復元したファイルの名前についている固有の番号を再利用すること。

 

一括変換ソフトでファイルを読み込んだ場合、その順番はファイル名での昇順であるが、WSHで取得するファイルの順番と同じであるとは限らない。マイクロソフトのソフトやスクリプトを使ってフォルダ内のファイル名を一括取得した時の並びが、こちらが想定する並びとは異なる場合がときどきある。

そこで、先に、復元したファイルの先頭に同じ桁数の連番を振っておく。桁数が同じ連番の場合は、マイクロソフトのソフトもこちらが想定した通りの昇順で並べてくれる。

 

'#
'# フォルダ内のDoc Paraを取得
'#

Option Explicit

On Error Resume Next

Dim sOutTxtPath
sOutTxtPath = "F:\DocParaList.txt"
Dim sSearchPath
sSearchPath = "F:\Doc調査"

Dim oFSO
Set oFSO = CreateObject("Scripting.FileSystemObject")

If oFSO.FileExists(sOutTxtPath) Then
Call oFSO.DeleteFile(sOutTxtPath)
End If

Dim oOutTxt
Set oOutTxt = oFSO.OpenTextFile(sOutTxtPath, 8, True, 0)

Dim oDir
Set oDir = oFSO.GetFolder(sSearchPath)

Dim oWord
Set oWord = CreateObject("Word.Application")
oWord.Visible = False

Dim oDoc
Dim sParaTxt

Dim oDirFile
For Each oDirFile In oDir.Files

Set oDoc = oWord.Documents.Open(oDirFile.Path)
sParaTxt = oDirFile.Name & chr(9)
sParaTxt = sParaTxt & oDoc.Paragraphs(1).Range.Text & chr(9)
sParaTxt = sParaTxt & oDoc.Paragraphs(2).Range.Text & chr(9)
sParaTxt = sParaTxt & oDoc.Paragraphs(3).Range.Text
oOutTxt.WriteLine sParaTxt
oDoc.Close()

Next

Set oDoc = Nothing
Set oWord = Nothing

Set oOutTxt = Nothing
Set oDir = Nothing
Set oFSO = Nothing

WScript.Echo "OK"
フォルダ内のファイル名を、別途作成したリストの名前に一括変換してくれるソフトとして、

「PSSTPSST」

というフリーソフトを利用した。

 

このソフトにはファイル名の先頭に任意の桁の連番を振る機能もついているので、スクリプトを実行する前に、連番を振っておく。