こんにちは!あつもり(@atumori17)です。
久しぶりに「初心者でも簡単!VBScriptでWindows効率化」シリーズですっ。今回は「ドラッグアンドドロップしてファイル名とフルパスを取得する方法」を紹介していきます。
日常業務の中でファイル名のフルパスが知りたいっていうケースがあると思います。例えばチーム内でファイルを共有したい場合。
ネットワークフォルダなどにあるファイル名のフルパスを書いて「ここにファイルが置いてありますよって」ってやると思います。そんな時にすぐにファイルのフルパスがわかると便利ですよね。
複数ファイルのフルパスを調べるときに便利
実は今回紹介するアプリケーションを使わなくても簡単に調べられる方法があるんです。それはShiftキーを押しながら右クリックして「パスのコピー」でファイルパスをコピーできちゃいます。
「えっ?じゃあ今回のアプリケーションってそんなに便利じゃないじゃん」って思いますよね。でも複数のファイルを調べたい場合はどうでしょう?1回1回Shiftキーを押しながら右クリック・・・って面倒ですよね。
今回のアプリケーションは複数のファイルパスを一度に調べられるので便利ですよ。
ファイルのフルパスを取得するスクリプト
それではまずはスクリプトの全文を紹介します。テキストエディタを開き、下記のコードを入力します。全て入力し終わったら「ファイルのフルパス取得.vbs」などのファイル名でデスクトップに保存します。
Option Explicit
'ドラッグアンドドロップで取得したファイルパスを変数に入れる
Dim GetPathArray
Set GetPathArray = WScript.Arguments
'ファイルシステムオブジェクト
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
'イテレータ
Dim pt
'ファイルの数ぶんループする
For Each pt in GetPathArray
'取得したファイル名
Dim FileName
FileName = objFSO.GetFileName(pt)
'ファイルのフルパスをInputBoxで表示させる
pt = InputBox("ドラッグアンドドロップしたファイル名 " & FileName,"ファイルのフルパスを表示", pt)
Next
'オブジェクト変数をクリア
Set objFSO = Nothing
プログラムコードの解説
Argumentsプロパティからファイルパスをコレクションとして取得する
WScriptオブジェクトのArgumentsプロパティを使うことでパラメータを取得することができます。パラメータとはプログラムに渡された値のことです。ここではドラッグアンドドロップしたファイルのパスになりますね。
パラメータはコレクションとして取得していますので複数ファイルのフルパスが格納されていいます。
とすることでコレクションとして取得したファイルのフルパスをオブジェクト変数の中に入れています。
For Each文でコレクションから1つ1つのフルパスを抜き出す
Argumentsプロパティでコレクションとして取得したフルパスですが、複数ファイルあった場合、1つ1つのファイルのフルパスにバラしてあげなければ使えません。そのためFor Each文を使い取得したファイルの数ぶんだけ繰り返し処理を行います。
下記のようにすることでコレクションの中の要素の数だけループさせることができます。つまりドラッグアンドドロップしたファイルの数だけ繰り返していることになります。
処理
next
上のコードで13~27行目の部分です。
'ファイルの数ぶんループする For Each pt in GetPathArray '取得したファイル名 Dim FileName FileName = objFSO.GetFileName(pt) 'ファイルのフルパスをInputBoxで表示させる pt = InputBox("ドラッグアンドドロップしたファイル名 " & FileName,"ファイルのフルパスを表示", pt) Next
GetFileNameメソッドでファイル名を取得する
ファイル名を取得するにはファイルシステムオブジェクトのGetFileNameメソッドを使います。
ファイルパスにはファイルのフルパスを指定します。
ファイルシステムオブジェクトはファイルやフォルダを操作できる便利なオブジェクトです。ファイルシステムオブジェクトについては過去の記事でも紹介していますので参考にしてみてください。
InputBox関数でファイルのフルパスを表示させる
InputBoxは通常、ユーザーに対して文字列の入力をしてもらうために使うものですが、今回の場合、ファイルのフルパスを表示させるのに使います。どうしてこのような使いかたをするかは後ほどご説明します。
InputBoxは次のようにして使います。
下の図を見てもらうとイメージがつかみやすいと思います。
今回のプログラムコードを見てみましょう。上記のコードで21行目にあたります。
pt = InputBox("ドラッグアンドドロップしたファイル名 " & FileName,"ファイルのフルパスを表示", pt)
InputBox関数の引数に次のような値を入れているのがわかりますね。
- 「表示させる文言」にGetFileNameメソッドで取得したファイル名
- 「タイトル名」にファイルのフルパスを表示
- 「テキストボックス内の値」にArgumentsプロパティから取得したフルパス
InputBox関数を使うことでフルパスをコピーできる
ファイル名とフルパスを表示させるだけならMsgBox関数でもできるんじゃないか?と思ったかたもいるかと思います。でもInputBox関数を使ったのにはきちんとした理由があります。
下の画像のようにInputBox関数を使えば、テキストボックス内に表示させたフルパスをコピーすることができます。
しかしMsgBox関数だと表示させたファイルパスをドラッグして選択できないため、コピーができないんです。
実は・・Ctrl + C を使えばコピーできますが、コピーしたデータをテキストエディタに貼り付けると下の画像のようになってしまいました・・
これでは使いにくいですよね。以上のことがInputBox関数を使っている理由です。
プログラムの説明は以上になります。
アプリケーションを実行してみる
では実際に起動してみます。ファイルを複数選択し、デスクトップにある「ファイルのフルパス取得.vbs」にドラッグアンドドロップします。
InputBoxにファイルのフルパスが表示されました。「テスト1.txt」「テスト2.txt」それぞれのファイルパスが表示されます。
まとめ
いかかでしたか?今回の内容をまとめると以下のようになります。
- WScriptオブジェクトのArgumentsプロパティでフルパスをコレクションとして取得できる
- GetFileNameメソッドでフルパスからファイル名を取得できる
- InputBoxは使い方次第で便利に使える関数です
以上になりますっ。お疲れ様でした~。