フォルダーのショートカットを、リンク先のフォルダーに置き換える
100個以上ある「フォルダーのショートカット」を、リンク先のフォルダーと
置き換えたい。そんな事案が発生した。さて、どうしたものか。
やりたいことを言葉で書いてみると、こんな感じか。
- リンク先のパスを取得する。
- 1. を、ショートカットファイルの保存パスに移動する。
- ショートカットファイルを削除する。
リンク先のパスを取得する方法は、色々と調べてみて、
こちらを参照した(ありがとうございます)。
vbabeginner.net
とここで、マクロを作成していて気が付いた。
FileSystemObjectが、ここにもある?
今まで馴染みがあったのは、Microsoft Scripting Runtimeを
参照したときのもの。これは一体・・・。
方々調べてみたところ、thomさんのブログに解説が載っていた。
(いつもありがとうございます)。
thom.hateblo.jp
ということで、出来上がったのがこちら。
Function ReplaceWithShortcutDestination(shortcut_path As String) As Boolean ' Windows Script Host Object Model を予め参照設定のこと。 Dim Wsh As IWshRuntimeLibrary.WshShell Set Wsh = New IWshRuntimeLibrary.WshShell On Error GoTo er: Dim ShortCut As IWshRuntimeLibrary.WshShortcut Set ShortCut = Wsh.CreateShortcut(shortcut_path) ' ショートカット先のパス Dim FolderPath As String FolderPath = ShortCut.TargetPath ' ScriptingRuntime.FileSystemObjectと同一機能。 ' 今回はWindows Script Host Object Modelを参照済みであるため、これを用いる。 Dim FSO As IWshRuntimeLibrary.FileSystemObject Set FSO = New IWshRuntimeLibrary.FileSystemObject ' ショートカット先のフォルダーを、ショートカットが保存されているパスに移動。 ' ※末尾の「\」を除くと、ショートカット先のフォルダ内にあるフォルダおよび ' ファイルが、ショートカットが保存されているパスに移動する。 FSO.MoveFolder FolderPath, FSO.GetParentFolderName(shortcut_path) & "\" ' ショートカットを削除。 FSO.DeleteFile shortcut_path ' 置き換え成功。 ReplaceWithShortcutDestination = True Exit Function er: ' 置き換え失敗。 ReplaceWithShortcutDestination = False End Function
一応、テスト結果は良好だった。
さっそく明日、職場(本番環境)で試してみるとしよう。
参考まで。