windowsのショートカット(.lnk)についての質問です。

ネットワークの構成を変更したので、ショートカットのドライブ名を
\\server1\
から
\\server2\
に一括置換したいです。
VBScriptやPerlなどのスクリプトで実現したいのですが、どういうオブジェクト・モジュールを利用したらいいかわかりませんので教えてください。
(VBScriptにはWshShortCutオブジェクトがあるようですが、ショートカットを新規に作成するときにしか使えないようです。)

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/02/07 16:47:33
  • 終了:2007/02/07 22:45:09

回答(2件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012007/02/07 17:51:56

ポイント35pt

CreateShortcut は内容の参照も出来ますし、上書き保存も出来ます。


(ステップ1)ショートカットファイルの中に書かれているターゲットの表示テスト

set WshShell = WScript.CreateObject("WScript.Shell")
set oShellLink = WshShell.CreateShortcut("ショートカットファイル名のフルパス")
WshShell.PopUp oShellLink.TargetPath, 5, "内容確認", wshQuestionMark

(ステップ2)ショートカットファイルの中に書かれているターゲットの書き換えテスト

set WshShell = WScript.CreateObject("WScript.Shell")
set oShellLink = WshShell.CreateShortcut("ショートカットファイル名のフルパス")
oShellLink.TargetPath = "新しいリンク先パス"
oShellLink.Save

後は適宜改造してください。


↓URL必須ということで、、、

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja...

id:escape1mgjp

なんと!!CreateShortcutでショートカットファイル名のフルパスを指定すると内容の参照ができたのですね。

ヘルプの読み込みが足りませんでした。

ありがとうございました。

2007/02/07 22:44:07
id:KirakiraHikaru No.2

KirakiraHikaru回答回数354ベストアンサー獲得回数682007/02/07 18:38:45

ポイント35pt

下記のようにすると変更可能です。カスタマイズして使ってみてください。


一括置換用.vbs

Option Explicit

Call Main()

Private Sub Main()
    Call ShortcutLinkTargetPathReplaceOfFiles("C:\lnk\test, "server1\", "server2\")
    MsgBox "完了"
End Sub

'ショートカットのTargetPathを置換
Private Sub ShortcutLinkTargetPathReplace(sFilePath, sFind, sRep)
    Dim oWShell 
    Set oWShell = WScript.CreateObject("WScript.Shell")

    Dim oShellLink
    Set oShellLink = oWShell.CreateShortcut(sFilePath)

    oShellLink.TargetPath = Replace(oShellLink.TargetPath, sFind, sRep)

    Call oShellLink.Save()
End Sub

'指定フォルダ内のショートカットのTargetPathを置換
Private Sub ShortcutLinkTargetPathReplaceOfFiles(stDirPath, sFind, sRep)
    Dim oFSO
    Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")

    If oFSO.FolderExists(stDirPath) Then
        Dim oFolder
        Set oFolder = oFSO.GetFolder(stDirPath)
        
        Dim oFile
        For Each oFile In oFolder.Files
            If UCase(Right(oFile.Name, 4)) = ".LNK" Then
                Call ShortcutLinkTargetPathReplace(oFile.Path, sFind, sRep)
            End If
        Next
    End If
End Sub


確認用.vbs

Option Explicit

Call Main()

Private Sub Main()
    Call ShortcutLinkDisp("C:\lnk\test")
End Sub

'指定フォルダのショートカット情報を表示
Private Sub ShortcutLinkDisp(sDirPath)
    Dim oFSO
    Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")

    If oFSO.FolderExists(sDirPath) Then
        Dim oFolder
        Set oFolder = oFSO.GetFolder(sDirPath)
        
        Dim oFile
		Dim sMsg
        For Each oFile In oFolder.Files
            'MsgBox oFile.Path & vbCrLf & UCase(Right(oFile.Name, 4))
            If UCase(Right(oFile.Name, 4)) = ".LNK" Then
		        Dim oWShell 
		        Set oWShell = WScript.CreateObject("WScript.Shell")

		        Dim oShellLink
		        Set oShellLink = oWShell.CreateShortcut(oFile.Path)

		        sMsg = sMsg & oShellLink.TargetPath & vbCrLf
            End If
        Next
        MsgBox sMsg
    End If

End Sub

http://q.hatena.ne.jp/1170834451

id:escape1mgjp

詳しいコードありがとうございます!!

2007/02/07 22:44:28

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません