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
コメント