Option Explicit Const OldHost = "" '変更前 Const NewHost = "" '変更後 Call Main() Sub Main() Dim objFS Dim objShell Dim Path 'デスクトップのファルダパスを取得します。 Set objShell = CreateObject("WScript.Shell") '※※※↓を対象フォルダに変更※※※ Path = "" '※※※↑を対象フォルダに変更※※※ 'FileSystemObjectを生成します。 Set objFS = CreateObject("Scripting.FileSystemObject") 'ショートカット書き換え処理を呼び出します ShortCutPathReplace objFS.GetFolder(Path) 'オブジェクトを破棄します。 Set objFS = Nothing Set objShell = Nothing msgbox "ショートカットファイルのリンク先変更が完了しました。" End Sub '引数で渡されたフォルダのパスとその配下のサブフォルダ全てを再帰的に走査し、 'ショートカットファイルのリンク先を書き換えます。 Sub ShortCutPathReplace(ByVal objBaseFolder) Dim objFS Dim objSubFolder Dim objFile Dim objShell Dim objShellLink Dim ShortCutPath Dim WorkDirPath 'オブジェクトを生成します。 Set objFS = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("WScript.Shell") 'サブフォルダを再帰的に走査します。 For Each objSubFolder In objBaseFolder.SubFolders ShortCutPathReplace objSubFolder Next 'フォルダ内の全てのファイルを走査します。 For Each objFile In objBaseFolder.files 'ファイルパスの拡張子を判定します。 If objFS.GetExtensionName(objFile.Path) = "lnk" Then 'ショートカットのオブジェクトを生成します。 Set objShellLink = objShell.CreateShortcut(objFile.Path) 'ショートカットのリンク先を取得します。 ShortCutPath = objShellLink.TargetPath '作業フォルダのパスを取得します。 WorkDirPath = objShellLink.WorkingDirectory On Error Resume Next 'ショートカットのリンク先が書き換え対象かを判定します。 If Left(ShortCutPath,Len(OldHost)) = OldHost Then 'リンク先パスを書き換えます。 objShellLink.TargetPath = Replace(ShortCutPath,OldHost,NewHost) 'リンク先の変更を保存します。 objShellLink.Save End If 'ショートカットの作業フォルダが書き換え対象かを判別します。 '※ショートカットがフォルダの場合は作業フォルダは空なのでIFの判定でFalseになり無視されます。 If Left(WorkDirPath,Len(OldHost)) = OldHost Then objShellLink.WorkingDirectory = Replace(WorkDirPath,OldHost,NewHost) '作業フォルダの変更を保存します。 objShellLink.Save End If 'エラー処理 If Err.Number <> 0 Then 'エラーが出た場合は、msgboxで通知してエラー対象のショートカットファイルを通知 msgbox "以下のショートカットファイルのリンク先書き換え処理でエラーが発生しました。" _ & vbcrlf & vbcrlf & objFile.Path End If 'エラーを初期化 On Error Goto 0 End If Next 'オブジェクトを破棄します。 Set objFile = Nothing Set objSubFolder = Nothing Set objShellLink = Nothing Set objFS = Nothing Set objShell = Nothing End Sub
コメント