こんにちは!みやしんです。
今回はVBScriptを使って、簡単で便利なツールを作ってみたいと思います。
会社で働いていると、社内サーバーのファイルやフォルダのパスをメールに貼ったりしますよね!
<C:\Users\1234567\Desktop> みたいに両端を<>で囲ったりすると思います。
ファイルやフォルダが1つなら「Shiftキーを押しながら右クリック → パスのコピー」で簡単にパスをゲットできますが、複数のファイルやフォルダが存在すると、ひとつひとつこの作業を繰り返すのはちょっと面倒ですよね。
そんな時でも「ドラッグ&ドロップ」で簡単に複数のパスを一括でコピーできるツールを作成する方法をご紹介したいと思います。

VBScriptは環境設定が不要だから初心者でも挑戦しやすいニャ!
なんと、Windowsのパソコンさえあれば誰でも出来ちゃうからとっても便利ニャ!
早く知りたいニャー!
ツール紹介
GetFilePath.VBSと名付けたVBSファイルにファイルやフォルダをドラッグ&ドロップだけで簡単にパスを把握できます。
図にまとめてみました。

ファイルやフォルダが複数あったり、混ざっていてもOKです!
サンプルコード
Option Explicit
'WScript.Argumentsでドラッグ&ドロップしたファイル情報を引数として配列で入手
Dim oFileInfoArray
Set oFileInfoArray = WScript.Arguments
'ファイル操作をするためのファイルシステムオブジェクトのインスタンスを作成
Dim oFso
Set oFso = CreateObject("Scripting.FileSystemObject")
'イテレータ
Dim i
'ファイルパス
Dim sFilePath
'取得したファイル名
Dim sFileName
'表示する全てのファイル名
Dim sAllFileNames
'コピぺする用にフォーマットを整えた全てのパス
Dim sAllPath
'取得したファイル情報を順番に取り出し、ファイル名とパスを入手
For i = 0 to (oFileInfoArray.count - 1) 'countで配列の要素数。0はじまりのため-1する
sFilePath = oFileInfoArray.Item(i) 'Itemでファイル情報からpathを入手
sFileName = oFso.GetFileName(sFilePath) 'GetFileNameでパスからファイル名部分のみを取得する
sAllFileNames = sAllFileNames & VbCrLf & sFileName 'sAllFileNamesにファイル名を足していく。VbCrLfは改行
sFilePath = ("<" & sFilePath & ">") 'ハイパーリンク化のために<>を付ける
sAllPath = (sAllPath & VbCrLf & sFilePath) 'sAllPathに全てのパスを足していく。
Next
'ファイルのフルパスをInputBoxで表示させる
Call InputBox("ドラッグアンドドロップしたファイル名" & sAllFileNames,"ファイルのフルパスを表示", sAllPath )
'メモリ開放(無くて良い)
Set oFso = Nothing 'オブジェクト変数をクリア
Set oFileinfoArray = Nothing
スクリプトのポイント解説
WScript.Argumentsでファイル情報を取得
VBScript で起動時に指定された引数を取得するには WscriptオブジェクトのArgumentsプロパティを使います。
今回、ドラッグ&ドロップしたときにVBSが起動しますので、 ドラッグ&ドロップ したファイルやフォルダの情報が引数としてWScript.Argumentsに格納されることになります。

WScriptオブジェクト
起動時パラメータは、WScript.ArgumentsプロパティからアクセスできるWshArgumentsコレクションに格納されている。さらにパラメータの種類により、WshNamedコレクションとWshUnnamedコレクションにフィルタリングされて格納される。図中の「M」はメソッド、「P」はプロパティ。
基本的には以下の2つをしっかり覚えておきましょう!
コード | 入手できる情報 |
WScript.Arguments.Item() | ファイルパス |
WScript.Arguments.count | 引数の数 |
FileSystemObjectでファイルやフォルダを操作
FileSystemObjectオブジェクトは、ドライブ・フォルダ・ファイルなどを操作できるオブジェクトです。FileSystemObjectオブジェクトを使うには、CreateObjectメソッドを実行してFileSystemObjectオブジェクトのインスタンスを作成します。
Dim oFso
Set oFso = CreateObject("Scripting.FileSystemObject")
CreateObjectメソッドに指定する引数は、”Scripting.FileSystemObject“です。
今回はGetFileNameメソッドを使って、指定したファイルからファイル名を取得します。
sFileName = oFso.GetFileName(sFilePath) 'GetFileNameでパスからファイル名部分のみを取得する
他にも一部メソッドを紹介します。
メソッド | 内容 |
CopyFile | ファイルをコピーする |
CopyFolder | フォルダをコピーする |
CreateFolder | フォルダを作成 |
CreateTextFile | テキストファイルを作成 |
DeleteFile | ファイルを削除 |
DeleteFolder | フォルダを削除 |
FileExists | ファイルの存在確認 |
FolderExists | フォルダの存在確認 |
InputBox関数
InputBoxに取得したファイル名やフォルダ名、パスを表示します。
引数と表示の関係はこんな感じです。

合わせて読みたい
VBScript関連は下記の記事もおススメです。
他のプログラミング言語にも興味がある方は、こちらもどうぞ!
コメント