Handling multiple command line arguments has always been ugly in VB
especially when some of the arguments are quoted because they
contain spaces and such. For example, if you wanted to write a program
that takes as an argument a filename, you would have to quote the
filename to ensure that a space inside of it does not confuse your
application.
Unfortunately there is no built-in functionality for handling this situation. This is why I wrote two functions: GetParam and GetParamCount
that I use all the time. They both can handle a mix of quoted and unquoted parameters.
public Function GetParam(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 i End Function public 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 + 1 End Function