VB.net程序处理命令行参数的例子

来源:互联网 发布:三国杀 郭淮 知乎 编辑:程序博客网 时间:2024/05/21 10:50

很多情况下需要支持命令行运行,但是VB中的主函数并没有直接支持命令行参数,获取方法有些特别。

今天用vb.net做了个,记录在这里以备日后查找。VB的处理与此不同,网上查了下,需要使用系统DLL文件中的GetCommandLine函数。

这里这个程序的命令行参数处理并不是很好,并不完善。命令行参数的处理还是比较复杂的。这里主要是看如何获取VB.net程序的命令行参数。

如有高人精通命令行的处理,有什么好思路也请在这里指点下。^_^

Imports System.IOModule Module1    Public AppVersion As String = "1.0"    Private CommandParameters() As String    Private isIllogreCase As Boolean = False    Private isSearchSubDir As Boolean = False    Private logFileName As String = "log.txt"    Private fileFilter As String = "*.*"    Private filePath As String = "./"    Private LogWriter As TextWriter = Console.Out    Private patternString As String    Sub Main()        If Not IsValidCommandLine() Then            Exit Sub        End If        LogWriter.WriteLine("[" & DateTime.Now & "]Start.")        StartFind()        LogWriter.WriteLine("[" & DateTime.Now & "]end.")        CloseLogWriter()    End Sub    Sub PrintUsage()        Console.WriteLine("FindStringInFiles Version : " & AppVersion)        Console.WriteLine("功能: 在符合条件的文件中查找指定的字符串。")        Console.WriteLine("用法:")        Console.WriteLine("FindStringInFiles ""PatternString""" & _                          "[-I] [-log [filename]] [-P [drive:]path] -S [-f filter]")        Console.WriteLine("    PatternString    查找的目标字符串,支持正则表达式。")        Console.WriteLine("    -I               在查找时忽略大小写,不指明则匹配大小写。")        Console.WriteLine("    -log [filename]  将结果保存在日志文件中,不给出文件名是默认保存在当前目录的log.txt中。")        Console.WriteLine("                     不给出-log则输出结果到标准输出。")        Console.WriteLine("    -P [drive:]path  指定起始路径,不指定则从当前目录开始搜索。")        Console.WriteLine("    -S               是否搜索子目录,默认不搜索子目录。")        Console.WriteLine("    -f filter        文件过滤条件,例如-f ’config_*.txt‘")    End Sub    Function IsValidCommandLine() As Boolean        CommandParameters = My.Application.CommandLineArgs.ToArray        If CommandParameters.Length = 0 Then            PrintUsage()            Return False        End If        InitLogWriter()        LogWriter.WriteLine("FindStringInFiles Version : " & AppVersion)        LogWriter.WriteLine("[" & DateTime.Now & "]CommandLine parameters : " & _                            Microsoft.VisualBasic.Interaction.Command)        patternString = CommandParameters(0)        If Not SetPattern() Then            Return False        End If        If Not SetFilePath() Then            Return False        End If        IsSearchSubdirectory()        If Not SetFileFilter() Then            Return False        End If        Return True    End Function    Function SetPattern()        For Each p In CommandParameters            If 0 = String.Compare(p, "-I") Then                isIllogreCase = True                Exit For            Else                isIllogreCase = False            End If        Next        Return True    End Function    Function SetFilePath() As Boolean        Dim index As Integer = 0        Dim paremCount As Integer = CommandParameters.Length        While index < paremCount            If 0 = String.Compare(CommandParameters(index), "-P") Then                ' 最后一个参数是 -P 没有参数值                If index = paremCount - 1 Then                    LogWriter.WriteLine("Miss value for operation '-P'!")                    Return False                Else ' 否则-P的下一个参数就是值                    filePath = CommandParameters(index + 1)                    Return True                End If            End If            index += 1        End While        If index >= paremCount Then            fileFilter = "*.*"        End If        Return True    End Function    Sub IsSearchSubdirectory()        For Each p In CommandParameters            If 0 = String.Compare(p, "-S") Then                isSearchSubDir = True                Exit For            Else                isSearchSubDir = False            End If        Next    End Sub    Function SetFileFilter() As Boolean        Dim index As Integer = 0        Dim paremCount As Integer = CommandParameters.Length        While index < paremCount            If 0 = String.Compare(CommandParameters(index), "-f") Then                ' 最后一个参数是 -f 没有参数值                If index = paremCount - 1 Then                    LogWriter.WriteLine("Miss value for operation '-f'!")                    Return False                Else ' 否则-f的下一个参数就是值                    fileFilter = CommandParameters(index + 1)                    Return True                End If            End If            index += 1        End While        If index >= paremCount Then            fileFilter = "*.*"        End If        Return True    End Function    Sub InitLogWriter()        Dim index As Integer = 0        Dim paremCount As Integer = CommandParameters.Length        While index < paremCount            If 0 = String.Compare(CommandParameters(index), "-log") Then                ' 参数 -log 后面带有文件名                If index < paremCount - 1 Then                    logFileName = CommandParameters(index + 1)                End If                Exit While            End If            index += 1        End While        ' 没有指定 -log 选项        If index > paremCount Then            Return        End If        If File.Exists(logFileName) Then            File.Delete(logFileName)        End If        'Create the log file.        Dim sw As StreamWriter = New StreamWriter(logFileName)        LogWriter = sw    End Sub    Sub CloseLogWriter()        LogWriter.Close()    End Sub    Sub StartFind()        LogWriter.WriteLine("找啊,找啊,找到一个在这里~")        LogWriter.WriteLine("敬个礼啊,握握手。把你放在日志里~")        LogWriter.WriteLine("哇喔,终于找完了 ^_^")    End SubEnd Module


原创粉丝点击