Home > Windows > ショートカットファイルの参照先を一括変更するスクリプト

ショートカットファイルの参照先を一括変更するスクリプト

  • このエントリーをはてなブックマークに追加

  • 2009-06-29 (月) 4:59
  • Windows

ファイルサーバを構築していると、サーバをリプレースする場合なんかに物凄く労力が必要になります。
システム的にDFSを構成していればそれほどでも無いかも知れませんが、スタンドアローンのファイルサーバを移転しなくてはいけなくなった時なんかは、例えばユーザの既に作成しているショートカットのリンク先変更やらで、それはそれは物凄く手間です。

・・・というわけで、今回はショートカットを一括置換するスクリプトを作ってみました。
ただし、対応しているのは拡張子”.lnk”と”.url”のデータのみで、ワードやエクセルの中身のショートカットには利用出来ません。

使い方

以下のスクリプトをテキストに保存して、拡張子を”vbs”に変更して、スクリプト中のPRECEDENT_TARGET_UNCとNEW_TARGET_UNCの値を各自の環境に合わせてください。
あとは変更したいファイルをドラッグ&ドロップするだけです。

例えば”\\server01\share”を”\\server02\share”に書き換えたい場合は以下のように設定します。

Const PRECEDENT_TARGET_UNC = "\\server01"
Const NEW_TARGET_UNC       = "\\server02"

パスにはドライブ名を利用する事も出来ます。”\\server01\share”をVドライブにマウントする場合であれば、以下のように設定してください。

Const PRECEDENT_TARGET_UNC = "\\server01\share"
Const NEW_TARGET_UNC       = "V:"

また、書き換え時にバックアップを取ったりしませんので、実行する前にバックアップを必ずとって、一度テスト環境でテストしてください。

'* ショートカットの参照先を一括変更するスクリプト
'* http://pnpk.net/cms/archives/2231
'*
'* ■使い方
'* NEW_TARGET_UNCで指定した参照先にPRECEDENT_TARGET_UNCを書き換えるスクリプトです。
'* ファイルサーバ移行後にファイルサーバのUNCが変更になった場合、
'* 各クライアント上に残っているショートカットの参照先を変更するのが非常に面倒だったので作成しました。
'*
'* このスクリプトをテキストファイルに保存し、拡張子を".vbs"に変更してください。
'* ショートカットファイルをドラッグ&ドロップで新しいUNCパスに変更します。
'* 一度に複数のファイルをドラッグ&ドロップで一括更新する事が可能ですが、あまり多いとエラーになります。
'*
'* ■注意
'* このスクリプトは実行すると、ユーザの同意無しに対象ファイルのリンク先を変更します。
'* 実行前には必ずバックアップを取ってから実行してください。
'*
'* 読みとり専用のファイルを指定した場合や、
'* 更新権限の無いファイルに対して操作を行うとエラーになります。
'* また、存在しないパスを入力すると処理が非常に遅くなります。
Option Explicit

'* -----------------設定ここから--------------------
'* PRECEDENT_TARGET_UNCに書き換えたい元のUNCパス、もしくはリンクを登録して、
'* NEW_TARGET_UNCに書き換えた後のUNCパス、もしくはリンクを登録します。
'* 対象ファイルは拡張子が".lnk"、もしくは".url"のファイルのみです。
'*
'* 誤動作を極力回避させるために、先頭からのパス変更のみを一回だけ実行します。
'*  ※例えば"\\FileServer01\hogehoge\FileServer01"というパスに対して
'*   "FileServer01"を書き換える場合でも、あったとしても書き変わるのは最初の
'*   "FileServer01"だけです。
'* また、パスにはドライブ名も利用する事が出来ます。
Const PRECEDENT_TARGET_UNC = "\\FileServer01"
Const NEW_TARGET_UNC       = "\\FileServer02"

'* -----------------設定ここまで--------------------

Call Main()

Private Sub Main()
	Dim objFS
	Dim strPATH
	Dim strFile

	Set objFS = WScript.CreateObject("Scripting.FileSystemObject")
	strPATH = objFS.GetParentFolderName(WScript.Arguments(0))

	For Each strFile In WScript.Arguments
		'JAGDE_SHORTCUTの呼び出し
		If JAGDE_SHORTCUT(strFile) = True Then
			'REWRITE_SHORTCUTの呼び出し
			Call REWRITE_SHORTCUT(strFile)
		Else

		End If
	Next

	Wscript.Echo "ショートカット書き換え処理が完了しました。"

End Sub

'ショートカットかどうかの判定
Function JAGDE_SHORTCUT(strFile)
	If UCase(Right(strFile, 4)) = ".LNK" OR UCase(Right(strFile, 4)) = ".URL" Then
		JAGDE_SHORTCUT = True
	Else
		JAGDE_SHORTCUT = False
	End If
End Function

'ショートカットの書き換え
Function REWRITE_SHORTCUT(strFile)
	On Error Resume Next

	Dim WshShell
	Dim objShellLink
	Dim strSHORTCUT_PATH

	set WshShell = WScript.CreateObject("WScript.Shell")
	set objShellLink = WshShell.CreateShortcut(strFile)

	strSHORTCUT_PATH = objShellLink.TargetPath
	'先頭から文字列を評価しています。
	If UCase(Left(strSHORTCUT_PATH,Len(PRECEDENT_TARGET_UNC))) = UCase(PRECEDENT_TARGET_UNC) Then
		objShellLink.TargetPath = Replace(strSHORTCUT_PATH,PRECEDENT_TARGET_UNC,NEW_TARGET_UNC,1,1,1)
		objShellLink.Save
	End If
	'エラー処理
	If Err <> 0 Then
		If Err = -2147024891 Then
			WScript.Echo "エラーが発生しました。" & vbCrLf & vbCrLf &_
						 "以下のファイルに対する書き込み権限が不足しているため" & vbCrLf &_
						 "ファイルを更新する事が出来ませんでした。" & vbCrLf & vbCrLf &_
						 strFile & vbCrLf & vbCrLf &_
						 "ファイルのアクセス権限、または読み取り属性を確認してください。"& vbCrLf &_
						 "このファイルに対する処理はスキップします。"
		Else
			WScript.Echo Err.Number & " : " & Err.Description
		End If
	End If

End Function

関連する記事一覧

関連する記事の一覧です。

  1. VBスクリプトでPing応答があったら再起動を実行する方法

    Ping応答があったら再起動を実行するスクリプトです。各端末の管理者権限を持つアカウントを作成してタスクスケジュールすれば一台の管理サーバから集中して再起動が管理出来ます。 動作確認はWindows XP、Windows [...]...

  2. SendKeysを利用して「ある程度」自動処理を実行するVBスクリプト

    初めに言っておきます。僕はプログラムがほとんど出来ません。 初めにソースコードがあって、ちょこっと修正するくらいなら出来なくは無いんですが、プログラムを作らないとやっていけない状況になった事が無いってのが一番大きいんだと [...]...

  3. リモートPCをシャットダウンする その2@WMI

    会社だと夜中までパソコンの電源入れっぱなしで帰宅する人って結構多いんです。パソコンの電源入れっぱなしだとHotFixの適用が出来なかったりログオンスクリプトが反映されなかったり、やっぱり管理面で結構面倒です。電気代も無駄 [...]...

  4. VBスクリプトの実行に時間制限を追加する方法

    今更ながらでお恥ずかしい限りですが、VBスクリプトに起動時間の制限をかける方法です。 とある処理を実行する際に、時間制限をかけなければならなくなりまして、何かいい方法無いかと調べてみたら、標準で対応していたようでした。 [...]...

  5. ログオンスクリプトとログオフスクリプト

    何となくWindows OS用のログオンスクリプトとログオフスクリプトを作ってみました。おそらくWindows XP以降のOSであれば稼働するはずです。 利用する場合には、グループポリシーから設定してください。 ログオン...

Comments:6


komikoni 10-06-21 (月) 12:12

公開ありがとうございます。超便利ですね。
こういうフリーソフトあるかなと思って探して無かったので
VBSで書くしかないかなと思ってたところでした。
急いでたので助かりました~


pnpk 10-07-02 (金) 1:33

>komikoniさん
コメントありがとうございます。
ちょうど去年の今頃に作ったVBスクリプトです。
お役に立てたようでよかったです。


ituki 11-02-21 (月) 13:45

助かりました。
自分は以下の分を追加して使用しました。

objShellLink.WorkingDirectory=Replace(strSHORTCUT_PATH,PRECEDENT_TARGET_UNC,NEW_TARGET_UNC,1,1,1)


d.i 11-05-29 (日) 11:28

ものすごく簡単にショートカットの変更ができました。
スクリプトの形なのでやり方もわかり、他にも応用が利きそうです。
大変勉強になりました。ありがとうございます。


せき 11-12-07 (水) 23:10

45行目INDEXが無効っていわれました~


pnpk 11-12-09 (金) 20:14

>せき さん
こんばんは、コメントありがとうございます。

上記スクリプト、ショートカットをドラッグ&ドロップして動作させる事を想定して作ったので、そのままダブルクリックで実行すると引き数が無いのでエラーになります。

ダブルクリックでスクリプトを実行されていた場合、スクリプトにドラッグ&ドロップでファイルを投げ入れて動作するか確認ください。この動作でエラーが出る場合、ショートカットを保存しているフォルダパスやファイル名に問題があるかもしれません。

45行目はドラッグ&ドロップするファイルのパス情報を取得する部分なので、引き数としてファイルパスが正しくスクリプト側に伝わっていない事が考えられます。

根本的な対策では無いですが、一度動作ご確認いただければと思います。

よろしくお願いします。

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://pnpk.net/cms/archives/2231/trackback
Listed below are links to weblogs that reference
ショートカットファイルの参照先を一括変更するスクリプト from http://pnpk.net

Home > Windows > ショートカットファイルの参照先を一括変更するスクリプト

Return to page top