Windowsのショートカットファイルを読み込み、ファイル本体を取得する話
ショートカットに対してはリンク先を探してファイルを取ってくるツールを作るのです。
これを使う環境上、何か新しいものをダウンロードやインストールは出来ません。
Javaは使えるけど、Jarは実行するためにコマンドプロンプトを開く必要があるのが地味に面倒。加えて環境によってJREのバージョンが違うから動かない、と言われると悲しくなります。
OSはWindows7 64bitで統一されています。
バッチで作るには処理が少々複雑だと考えられます。
これらを踏まえて何を使って実装するか。そうだね、VBScriptだね。初めて触ります。VBAにヘイトが溜まっている現状、パッと見似ているVBScriptを触るのがとてもこわいです。
で、作った。基本コピペなのに1時間くらいかかりました。むしろ自分でゴリゴリ書いたほうが早かった説がある。
以下、ツール概要
- VBScriptファイルにフォルダをドロップすると、フォルダ内のファイルをtempフォルダにコピーする。
- ショートカット(.lnk)ファイルはリンク先をtempフォルダにコピーする。
- tempフォルダはドロップしたフォルダ直下に作成される。
仕事で使うので、いろいろとコピペしながら作ったよ。
Option Explicit 'ドロップされたパスを取得 Dim myArray Dim objFSO, myFile, objShell, objSc, objFolder Dim objCopiedFol, objFileInFol, objFile 'As object Dim openPath, linkPath, copiedFolPath 'As String Set myArray = WScript.Arguments 'ファイルかどうかの判断用にオブジェクトを作成 Set objFSO = CreateObject("Scripting.FileSystemObject") 'ドロップされた物の判断 if objFSO.FolderExists(myArray(0)) then 'ディクトリの場合 openPath = myArray(0) Else 'ディレクトリ以外の場合 if objFSO.GetExtensionName(myArray(0)) <> "lnk" then 'ファイルの場合、その親のディレクトリパスを取得 Set myFile = objFSO.Getfile(myArray(0)) openPath = myFile.ParentFolder Else 'ショートカットの場合 'それぞれのオブジェクトを作成 Set objShell = WScript.CreateObject("WScript.Shell") Set objSc = objShell.CreateShortcut(myArray(0)) 'パスを取得 openPath = objSc.TargetPath 'ショートカット先がファイルか判断 If objFSO.FileExists(openPath) Then 'ファイルの場合、その親のディレクトリパスを取得 Set myFile = objFSO.Getfile(openPath) openPath = myFile.ParentFolder End If End If End If 'フォルダ作成 copiedFolPath = openPath & "\temp" if Not objFSO.FolderExists(copiedFolPath) then Set objCopiedFol = objFSO.CreateFolder(copiedFolPath) End If Set objFolder = objFSO.GetFolder(openPath) For Each objFileInFol In objFolder.Files 'msgbox objFileInFol.Name if objFSO.GetExtensionName(objFileInFol.Path) <> "lnk" then 'ファイルの場合 'msgbox openPath & "\" & objFileInFol.Name objFSO.CopyFile openPath & "\" & objFileInFol.Name, copiedFolPath Else 'ショートカットの場合 'それぞれのオブジェクトを作成 'msgbox openPath & "\" & objFileInFol.Name Set objShell = WScript.CreateObject("WScript.Shell") Set objSc = objShell.CreateShortcut(openPath & "\" & objFileInFol.Name) 'パスを取得 linkPath = objSc.TargetPath 'msgbox linkPath 'ショートカット先がファイルか判断 If objFSO.FileExists(linkPath) Then 'ファイルの場合 objFSO.CopyFile linkPath, copiedFolPath End If End If Next msgbox "完了"
なんかVB系の話しかしてない…。
Animelo Summer Live 2014 -ONENESS- 8.31 [Blu-ray]
- 出版社/メーカー: ランティス
- 発売日: 2015/03/25
- メディア: Blu-ray
- この商品を含むブログを見る
Animelo Summer Live 2014 -ONENESS- 8.30 [Blu-ray]
- 出版社/メーカー: ランティス
- 発売日: 2015/03/25
- メディア: Blu-ray
- この商品を含むブログを見る
Animelo Summer Live 2014 -ONENESS- 8.29 [Blu-ray]
- 出版社/メーカー: ランティス
- 発売日: 2015/03/25
- メディア: Blu-ray
- この商品を含むブログを見る