人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: escape1mgjp
●カテゴリ:コンピュータ
✍キーワード:Perl VBScript Windows オブジェクト ショートカット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kn1967
●35ポイント

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...

◎質問者からの返答

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

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

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


2 ● KirakiraHikaru
●35ポイント

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


一括置換用.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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ