「wscript.arguments ファイル名」
「wsh argumentsからファイル名取得」
という検索で、このサイト・インストラクターのネタ帳へアクセスがありました。
WSH(Windows Script Host)で、WshArgumentsコレクションオブジェクトから、個々のファイル名を取得するコードを探していた方による検索キーワードです。
参考になりそうなVBScriptを2つご紹介します。
Wscript.Argumentsからファイル名を取得するサンプルスクリプト
一つ目はユーザー定義関数を利用するスクリプトです。
以下のコードを含んだ拡張子「.vbs」のファイルを作成して、何らかのファイルをドラッグアンドドロップすると、そのファイルのフルパスと、ファイル名が順番にメッセージボックスに表示されます。
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メソッドを利用する方法です。
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
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