リンク切れしたファイル/フォルダのショートカットを一括削除するアプリを作ってみた
今会社で作っている”ファイル登録”のVBアプリは、登録と同時にショートカットファイルを作るようにしてるんですが、元ファイルを消したらリンク切れのショートカットファイルに変わってしまいます。
またファイルサーバーのフォルダ構成が整理されて、多くの人のPC内にリンク切れのショートカットができたりしました。
まあリンク切れのショートカットができることなんて、日常茶飯事です。
このリンク切れしたショートカットファイルを自動で削除したい。
と思ってググってみたのですが、どういうわけか見つかりません。
切れたインターネットリンクを消すアプリは多いんですが。例えばこんなの。
ファイル/フォルダショートカットの一括削除は見つかりません。
あまり需要ないんですかね・・・
でもなんとなく作れそうな気がしたので、作ってみました。
アプリ本体 : リンク切れショートカット削除アプリ
このVBアプリ、フォルダを選択するとそのフォルダ内のショートカットを検索し、リンク切れしてるものだけ消去してくれます。
Windows 2000以上、.Netframework 2.0以上が入ってれば動きます。
まずはリンクを用意。
リンク切れをしているファイル/フォルダの頭に(切)を付けておきました。
これだけが消えて、(生)とついた生きてるリンクのみが残るはずです。
これがアプリ本体。
整理したいショートカットの入ったフォルダを白い枠の中にドラッグ&ドロップしてもらうか、”参照”をクリックしてフォルダを選択します。
フォルダを選んだら”OK”ボタンをクリック。
リンク切れしたショートカットがあると、このように消去した旨を知らせてくれます。
消すものがないと、こんなメッセージに。
この通り、(切)とついたショートカットのみ消えてます。
”Cancel”をクリックすると終了。
たったこれだけのアプリです。
が、意外なところでトラップがありまして。
ちょっとプログラムな話になりますが、リンク切れの判定を”Scripting.FileSystemObject”のオブジェクトでやってます。
そこで、リンク先のフォルダがあるかどうかを見る”FolderExists”、ファイルがあるかどうかを見る”FileExists”というコマンドを使います。
ところがフォルダへのショートカットと、ファイルのショートカットが混在してることもあるため、両方チェックしなきゃいけません。
で、下のようなコードになりました。
(一部、説明用に変えております)
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim oShell As Object = CreateObject("WScript.Shell")
Dim oShortcut As Object
Dim LnkFileNM As String
Dim objFileSys As Object = CreateObject("Scripting.FileSystemObject")
myFilename = Dir("C:\tmp\*.lnk")
Do Until myFilename = ""
oShortcut = oShell.CreateShortcut( "C:\tmp\" & myFilename)
LnkFileNM = oShortcut.TargetPath
If objFileSys.FolderExists(LnkFileNM) = False And objFileSys.FileExists(LnkFileNM) = False Then
System.IO.File.Delete("C:\tmp\" & myFilename)
End If
myFilename = Dir()
Loop
上のコードでは、Button2をクリックしたら”C:\tmp\”の中のリンクを調べるようになってます。
If文の後ろの”~ = False”がうるさいですが。
いろいろ調べてわかったのは
・ ファイルリンク用ショートカットでは”FolderExists”で”False”が出る。
・ フォルダリンク用ショートカットでは”FileExists”で”False”が出る。
・ FolderExistsとFileExistsの両方で”False”と帰ってくるリンクが、本当にリンク切れしている。
だったので、上のようなIf文になります。
これでファイルとフォルダへのショートカットリンクが混在していても、リンク切れがチェックできるようになりました。
ちなみにインターネットリンクはリンク切れ有無にかかわらず消えません。あくまでもファイル/フォルダリンクのみです。
本当はもうちょっと頑張って、選択したフォルダの下の階層まで検索するようにしようかと思ったのですが、やめちゃいました。
とりあえず、これで少しは便利になりそうです。
« TeamViewerでメインPCを遠隔操作再び | トップページ | WD製2TBのHDD買ってきた »
「パソコン系」カテゴリの記事
- ロジクール製小型静音Bluetoothマウスを購入(2024.11.18)
- 例のUSB電力計で会社PCの電力を測ってみた(2024.11.17)
- 我が家の現在のPC・スマホ事情(2024.11.03)
コメント