【VBScript】ショートカットファイルのリンク先を一括変更するサンプルコード

Tips
スポンサーリンク

今回は、デスクトップに置かれているショートカットファイル(lnk)のリンク先一斉に書き変えることが必要になり、その処理をVBScriptで作成したので、参考までに紹介させていただきます。

ファイルサーバーのリプレイスや移行などで、ユーザーの自端末内で使用している各ショートカットを一斉に書き変えないといけないケースなどでご活用ください。

因みに、今回のサンプルプログラムはVBScript用として作成しておりますが、VBAでも基本的な構文は同じであり、多少の修正をすればほぼ同様の処理で実装することは可能です。

サンプルコードの処理概要

当スクリプトの処理概要を以下になります。

  • ファイルサーバーのホスト名変更に伴いリンク先を書き変えるケースを想定
  • 処理対象のディレクトリはデスクトップ
  • サブフォルダも含めて再帰的にlnkファイルを全ファイル走査で選別
  • リンク先のパスが特定の文字列の場合だけ書き換え
  • 書き換え対象は「リンク先パス」と「作業フォルダ」

ショートカットのリンク先を書き変えるサンプルコード

ご自身の環境によって処理内容を書き変えて使用してください。
当然ですが、条件に当てはまるリンク先はすべて書き変えてしまいます。
よって、動作テストをする際にはショートカットファイルのバックアップを取っておくなどの対策をしてから試すようにしてください。

Option Explicit

Const OldHost = "\\OldServerName"    '変更前ホスト名
Const NewHost = "\\NewServerName"    '変更後ホスト名

Call Main()

    Sub Main()

        Dim objFS
        Dim objShell
        Dim DesktopPath

            'デスクトップのファルダパスを取得します。
            Set objShell = CreateObject("WScript.Shell")
            DesktopPath = objShell.SpecialFolders("Desktop")

            'FileSystemObjectを生成します。
            Set objFS = CreateObject("Scripting.FileSystemObject")

            'ショートカット書き換え処理を呼び出します
            ShortCutPathReplace objFS.GetFolder(DesktopPath)

            'オブジェクトを破棄します。
            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

【参考】WshShortcutオブジェクトについて

今回のサンプルコードにおけるポイントは「WshShortcutオブジェクト」です。
今回はWshShortcutオブジェクトの「TargetPath」プロパティと「WorkingDirectory 」プロパティを使用していますが、他にもショートカットを定義するためのプロパティはあるので、他のプロパティを知りたい場合は、以下のリンク先をご参照ください。

第14回 WshShellオブジェクトを利用する(3)
今回はプログラムを起動するメソッドのほか、ショートカットの作成/管理、特殊フォルダの取得、環境変数の操作方法などについて解説。

【参考】ショートカットファイルの作成について

当ブログでは、過去にIE関連の設定を自動化する処理を紹介しており、その記事のなかで、ショートカットを新しく作成するサンプルコードも掲載しております。
良かったらこちらも併せてご確認ください。

最後に

今回の記事では、「デスクトップに置かれているショートカットファイルのリンク先を一斉に書き変える処理」をVBScriptで実装した際のサンプルコードを紹介させていただきました。
私は実際にこのスクリプトを使用して、自社のユーザー端末内のショートカットを更新する予定です。

今回の記事がどなたかの参考になれば幸いです。
それでは今回も読んでいただきましてありがとうございました。

タイトルとURLをコピーしました