VBSのエクスプローラーコンテキストメニューのバージョン管理

共通のファイルグループで共同作業する場合、従業員の1人がドキュメントを台無しにすることがよくあります。 地域新聞でタイプセッターとして働いている間に、私はそのような場合に出くわし、いくつかの要素を再配置する必要があります。



そこで、ファイルリカバリシステムについて考えました。 マシン上のバックアップは週に1回自動的に実行されるため、データを失うことはありませんが、ドキュメントを頻繁に変更しても保存されません。 発行は毎週行われ、バンドはほとんどありません-現在のリリースのレイアウトファイルを含むディレクトリは1〜2 GBかかります。 個別のファイルサーバーはありません。すべてのデータは私のマシンに保存され、さらに2台のPCによってネットワーク上で使用されます。 実際、すべてのカードは私の手の中にあります。



バックアップには、 MAX SyncUpユーティリティを使用します(広告ではありません)。 マシンには3つのハードドライブがあります:OS /ソフトウェア、レイアウト/写真、バックアップ。 ファイルのバックアップコピーを作成しても、パフォーマンスに大きな影響はありません。 3台目のHDDには十分な空き領域があるため、「フリルを少なくしてシステムを安定して運用する」という原則に沿って、追加のソフトウェアを使用しませんでした。

そこで、アイデアを整理し始めました。



まず、バックアップユーティリティで、レイアウトで変更されたすべてのファイルをX:\ Backup \ディレクトリにコピーし、日付と時刻を7分ごと(実験的に選択した)のルールを作成しました。 ファイルの各バージョンは、もちろん変更されていない限り、短期間で違いがあります。 今週月曜日から働いていたので、私はもう一度データ破損に遭遇し、それを復元しようとしました。 これを行うには、バックアップのあるディレクトリに手動で移動し、検索でストリップの名前を入力する必要がありました。 しかし、あなたはそのように働くことはできず、原理からアイデアを開発する必要があります。 2番目の部分に移ります-コンテキストメニューに「ファイルバージョン」という項目を追加します。



まず、レジストリにディレクトリを作成しました



HKEY_CLASSES_ROOT\*\shell\Search\command
      
      







後者では、文字列パラメーターを追加しました



 WScript C:\windows\version.vbs \"%1\"
      
      







上記のレジストリの検索ディレクトリに、アイテムの名前を指定するMUIVerbという文字列パラメーターを作成しました。 この例では、これらは「ファイルバージョン」であり、アイコンへのパスを含むIconパラメーターです。



何が起こった:



画像



画像



バックアップは、次の形式で変更されると自動的にディレクトリに保存されます。



 X:\Backup\2014-09-01T16-45\ 3  X:\Backup\2014-09-02T15-32\ 1  X:\Backup\2014-09-02T15-39\ 1 
      
      







次に、バックアップで必要なファイルを検索してリストするVBSスクリプトを作成します。

WSO.dllを使用する



スクリプトコード
 Dim folder Dim fso Dim filename Dim mass() folder = "X:\Backup" '       Set WshShell = CreateObject("WScript.Shell") rc = WshShell.Run("regsvr32.exe /sc:\windows\wso.dll", 0, True) Set objArg = WScript.Arguments Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set oFolders = fso.GetFolder(folder) Set oSubfolders = oFolders.SubFolders filename = FSO.GetFileName(objArg(0)) Redim mass(oSubFolders.Count) i = 1 For Each oFolder In oSubFolders mass(i) = oFolder.Name i=i+1 Next Set o = WScript.CreateObject("Scripting.WindowSystemObject") o.EnableVisualStyles = true Set f = o.CreateForm(0,0,520,0) f.Text = " " f.CenterControl() Sub ButtonClick(this) rc=WshShell.Run(this.note) f.Close() End Sub Function CanClose(Sender,Result) Result.Put(true) End Function files =0 for i = oSubFolders.Count to 1 Step -1 if FSO.FileExists(Folder & "\"& mass(i) & "\" & filename) Then if files < 15 then f.ClientHeight = 40 * (files +1) f.CenterControl() strListFolders = fso.GetBaseName(Folder & "\"& mass(i) & "\" & filename) & " - " & GetDate(mass(i)) & vbcrlf SET Button = f.CreateButton(7,40 * files,490,40,strListFolders) Button.CommandLinkButton = true Button.OnClick = GetRef("ButtonClick") Button.Note = chr(34) & Folder & "\"& mass(i) & "\" & filename & chr(34) files = files +1 End if End if Next if files =0 then MsgBox "  " f.close End if f.OnCloseQuery = GetRef("CanClose") f.Show() o.Run() Function StartupDir() Dim s s = WScript.ScriptFullName s = Left(s,InStrRev(s,"\")) StartupDir = s End Function Sub AboutWSO_OnHitTest(Sender,x,y,ResultPtr) ResultPtr.put(o.Translate("HTCAPTION")) End Sub Sub CloseFormHandler(Sender) Sender.Form.Close() End Sub function GetDate(ByVal DateIn) If DateDiff("d",DateSerial(Left(DateIn,4),Mid(DateIn,6,2),Mid(DateIn,9,2)),Date()) = 1 Then GetDate = "  " & Mid(DateIn,12,2) & "." & Right(DateIn,2) ElseIf DateDiff("d",DateSerial(Left(DateIn,4),Mid(DateIn,6,2),Mid(DateIn,9,2)),Date()) > 1 Then GetDate = Mid(DateIn,9,2) & "." & Mid(DateIn,6,2) & "." & Left(DateIn,4) & "  " & Mid(DateIn,12,2) & "." & Right(DateIn,2) 'ElseIf DateDiff("d",DateSerial(Left(DateIn,4),Mid(DateIn,6,2),Mid(DateIn,9,2)),Date()) < 1 Then ' GetDate = Mid(DateIn,9,2) & "." & Mid(DateIn,6,2) & "." & Left(DateIn,4) & "  " & Mid(DateIn,12,2) & "." & Right(DateIn,2) ElseIf DateSerial(Left(DateIn,4),Mid(DateIn,6,2),Mid(DateIn,9,2)) = Date() Then GetDate = "  " & Mid(DateIn,12,2) & "." & Right(DateIn,2) End If end function
      
      









何が起こった:



画像



画像



また、10日より古いバックアップファイルの自動削除を設定します。 月曜日から金曜日までの累積占有ディスク容量は6 GBであったため、空き容量について心配することはできません。 かさばるソフトウェアをメモリに保持しなくても、他のマシンにソフトウェアを追加する必要がないため、ネットワーク経由などでバックアップにすばやくアクセスできます。



もちろん、この実装には、サブディレクトリでの検索の欠如や名前へのバインドなどの欠陥があります。 しかし、VBSスクリプトのより柔軟な構造は今では必要ありませんが、将来的には確実に必要になります。 私は批判と提案を喜んでいます。



All Articles