ファイルかディレクトリかを判定する関数
ちょっと必要になったんで作ってみた。
ソース
' ファイルか、ディレクトリかを判定する関数 ' 返し値 0 : フォルダ ' 1 : ファイル(ショートカット) ' 2 : ファイル(URLショートカット) ' 3 : ファイル ' -1 : 不明 Function ArgumentTypeCheck(arg) Dim rtn Dim objFSO, strExName On Error Resume Next rtn = -1 Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FolderExists(arg) Then rtn = 0 Else If objFSO.FileExists(arg) Then strExName = objFSO.GetExtensionName(arg) Select Case UCase(strExName) Case "LNK": rtn = 1 Case "URL": rtn = 2 Case Else: rtn = 3 End Select End If End If Set objFSO = Nothing argTypeCheck = rtn End Function
自分の場合は、WScript.Argumentsコレクションを渡してやって…とかで使った。
Dim n If WScript.Arguments.Count = 1 Then n = ArgumentTypeCheck(WScript.Arguments(0)) If n = 0 Then
な感じで。とりあえず、引数で渡した文字列がパスとして有効な文字列なら-1以外を返す(筈)と。
最初は引数で受け取った文字列をFSOのGetFolderで取得出来ればディレクトリ、
取得出来なければ(エラーになれば)GetFileで試みて…って感じでやろうとしたんだけど、
これだと、なぜかファイルパスでもGetFolderでエラーにならずに取得された?んで
FolderExistsやFileExistsでやってみたら、無事うまくいった。
ちなみに、拡張子の無いファイルもちゃんとファイルとして判定しよりました。
それにしても、FSOは重宝しますね。お手軽だし、WSHで何かやる時には欠かせません。