ファイルかディレクトリかを判定する関数

ちょっと必要になったんで作ってみた。

ソース

' ファイルか、ディレクトリかを判定する関数
' 返し値    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で何かやる時には欠かせません。