Handling multiple command-line arguments has always been ugly in VB, especially when some of the arguments are quoted because they contain characters such as spaces. For example, if you want to write a program that takes as an argument a filename, you must quote the filename to ensure a space inside it doesn’t confuse your application. Unfortunately, there’s no built-in functionality for handling this mess. Here are two functions?GetParam and GetParamCount?that I use all the time. Each can handle a mix of quoted and unquoted parameters:
Public Function GetParam(ByVal Count As Integer) As String Dim i As Long Dim j As Integer Dim c As String Dim bInside As Boolean Dim bQuoted As Boolean j = 1 bInside = False bQuoted = False GetParam = "" For i = 1 To Len(Command) c = Mid$(Command, i, 1) If bInside And bQuoted Then If c = """" Then j = j + 1 bInside = False bQuoted = False End If ElseIf bInside And Not bQuoted Then If c = " " Then j = j + 1 bInside = False bQuoted = False End If Else If c = """" Then If j > Count Then Exit Function bInside = True bQuoted = True ElseIf c <> " " Then If j > Count Then Exit Function bInside = True bQuoted = False End If End If If bInside And j = Count And c <> """" _ Then GetParam = GetParam & c Next iEnd FunctionPublic Function GetParamCount() As Integer Dim i As Long Dim c As String Dim bInside As Boolean Dim bQuoted As Boolean GetParamCount = 0 bInside = False bQuoted = False For i = 1 To Len(Command) c = Mid$(Command, i, 1) If bInside And bQuoted Then If c = """" Then GetParamCount = GetParamCount + 1 bInside = False bQuoted = False End If ElseIf bInside And Not bQuoted Then If c = " " Then GetParamCount = GetParamCount + 1 bInside = False bQuoted = False End If Else If c = """" Then bInside = True bQuoted = True ElseIf c <> " " Then bInside = True bQuoted = False End If End If Next i If bInside Then GetParamCount = GetParamCount + 1End Function