pdumpfsと言うツールがありまして、

  • 日付毎にディレクトリを変えてコピーするが、
  • 前回から変更が無ければハードリンクを作成

と言う、なるほどなー。と言う仕組み。

知らなかったが、windowsでもハードリンクって作れるみたいだし、 10行くらいでできないかな、と思って書いてみた。

wdumpfs.vbs

Set FSO = CreateObject("Scripting.FileSystemObject")
Set sh  = CreateObject("WScript.Shell")
 
DuplicateFiles WScript.Arguments(0), 
    GetDestPath(WScript.Arguments(1), Now, True), _
    GetDestPath(WScript.Arguments(1), DateAdd("d", Now, -1), False)
 
Sub DuplicateFiles(src, dst, backup)
    For Each folder In FSO.GetFolder(src).SubFolders
        dstdir = FSO.BuildPath(dst, folder.Name)
        If Not FSO.FolderExists(dstdir) Then FSO.CreateFolder dstdir
        DuplicateFiles folder.Path,dstdir , FSO.BuildPath(backup, folder.Name)
    Next
    For Each file In FSO.GetFolder(src).Files
        comppath = FSO.BuildPath(backup, file.Name)
        If FSO.FileExists(comppath) Then
            If file.DateLastModified > FSO.GetFile(comppath).DateLastModified Then
                file.Copy FSO.BuildPath(dst, file.Name), True
            Else
                sh.Exec "fsutil hardlink create """ & _
                    FSO.BuildPath(dst, file.Name) & """ """ & comppath & """"
            End If
        Else
            file.Copy FSO.BuildPath(dst, file.Name), True
        End If
    Next
End Sub
 
Function GetDestPath(base, dt, create)
    path = FSO.BuildPath(base, Year(dt) & "\" & _
        Right("0" & Month(dt), 2) & "\" & Right("0" & Day(dt), 2))
    If create Then CreateFolders path
    GetDestPath = path
End Function
 
Sub CreateFolders(path)
    parent = FSO.GetparentFolderName(path)
    If Not FSO.FolderExists(parent) Then CreateFolders parent
    FSO.CreateFolder path
End Sub

んーーーー、全然10行じゃない。無理。 しかも「前回」じゃなく「前日」(毎日実行することが前提)となってます。

JScriptなら若干減るかな、と思って試したが全然減らないので断念。くやしいですっ!(ザンブングル)

役だった?

選択肢 投票
はい 2  
いいえ、ケフィアです 0  

作成日 2009-05-22

投稿者メソ | パーマリンク | トラックバック(102) | コメント(1)

Tag: WSH 10行くらい


  • Script 利用させていただきました。多少変更しましたが。とても助かりました。ありがとうございます。 -- naon? 2010-02-23 (火) 17:35:45

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White