Home » WSH・Windows Script Hostの使い方 » Wscript.Argumentsからファイル名を取得するVBScript

Wscript.Argumentsからファイル名を取得するVBScript

WSH, Windows Script Host, VBScript

「wscript.arguments ファイル名」
「wsh argumentsからファイル名取得」
という検索で、このサイト・インストラクターのネタ帳へアクセスがありました。

WSH(Windows Script Host)で、WshArgumentsコレクションオブジェクトから、個々のファイル名を取得するコードを探していた方による検索キーワードです。

[スポンサードリンク]

参考になりそうなVBScriptを2つご紹介します。

Wscript.Argumentsからファイル名を取得するサンプルスクリプト

一つ目はユーザー定義関数を利用するスクリプトです。
以下のコードを含んだ拡張子「.vbs」のファイルを作成して、何らかのファイルをドラッグアンドドロップすると、そのファイルのフルパスと、ファイル名が順番にメッセージボックスに表示されます。

Option Explicit

If Wscript.Arguments.Count = 0 Then
  MsgBox "ファイルをドラッグ&ドロップしてください。"
  Wscript.Quit
End If

Dim i
For i = 0 To Wscript.Arguments.Count - 1
  MsgBox "フルパス: "   & Wscript.Arguments.Item(i)
  MsgBox "ファイル名: " & getFileName(Wscript.Arguments.Item(i))
Next
MsgBox "終了しました。"


Private Function getFileName(ByVal fullPath)
  getFileName = Mid(fullPath, InStrRev(fullPath, "\") + 1)
End Function

「wscript.arguments ファイル名」
「wsh argumentsからファイル名取得」
という検索をなさった方が知りたかったのは、For~Nextループの中の、
  MsgBox "ファイル名: " & getFileName(Wscript.Arguments.Item(i))
と、ユーザー定義関数、
  Private Function getFileName(ByVal fullPath)
   getFileName = Mid(fullPath, InStrRev(fullPath, "\") + 1)
  End Function
でしょう。

WshArguments.Itemプロパティで個々のファイルのフルパスが取得できる

WshArgumentsコレクションオブジェクトのItemプロパティを使うと、個々のファイルのフルパスが取得できます。

WshArgumentsはコレクションですが、1オリジンではなく0オリジンであるため、For~Nextループを、
  For i = 0 To Wscript.Arguments.Count - 1
と、初期値「0」、最終値「Wscript.Arguments.Count - 1」で指定しています。

For~Nextループ内の、
  MsgBox "フルパス: "  & Wscript.Arguments.Item(i)
  MsgBox "ファイル名: " & getFileName(Wscript.Arguments.Item(i))
は、WshArgumentsコレクションの既定プロパティである「.Item」を省略して
  MsgBox "フルパス: "  & Wscript.Arguments(i)
  MsgBox "ファイル名: " & getFileName(Wscript.Arguments(i))
と書いても同じです。

フルパスからファイル名を取得するユーザー定義関数

フルパスからファイル名を取得するユーザー定義関数内の、
  Mid(fullPath, InStrRev(fullPath, "\") + 1)
は、VBScriptやVBA(Visual Basic for Applications)で割とよく見かける、InStrRev関数とMid関数を組み合わせた処理です。

指定された文字列(フルパス)の、後ろから「\」をInStrRev関数で探して、
  Mid(fullPath, InStrRev(fullPath, "\") + 1)
その位置より後ろの文字列をMid関数で取得しています。
  Mid(fullPath, InStrRev(fullPath, "\") + 1)

FileSystemObjectを使ってWscript.Argumentsからファイル名を取得するサンプルスクリプト

もう一つは、ユーザー定義関数を使うのではなく、FileSystemObjectのGetFileNameメソッドを利用する方法です。

Option Explicit

If Wscript.Arguments.Count = 0 Then
  MsgBox "ファイルをドラッグ&ドロップしてください。"
  Wscript.Quit
End If

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

Dim i
For i = 0 To Wscript.Arguments.Count - 1
  MsgBox "フルパス: "   & Wscript.Arguments.Item(i)
  MsgBox "ファイル名: " & fso.GetFileName(Wscript.Arguments.Item(i))
Next

Set fso = Nothing
MsgBox "終了しました。"

先ほどのスクリプトとの大きな違いは、For~Nextループの中の、
   MsgBox "ファイル名: " & fso.GetFileName(Wscript.Arguments.Item(i))
です。

ここでFileSystemObjectのGetFileNameメソッドを利用するために、事前に、FileSystemObjectオブジェクトをCreateObjectしています。
  Dim fso
  Set fso = CreateObject("Scripting.FileSystemObject")

[スポンサードリンク]

Home » WSH・Windows Script Hostの使い方 » Wscript.Argumentsからファイル名を取得するVBScript

「WSH・Windows Script Hostの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.