خوب من این دستور رو نوشتم و ازش جواب گرفتم فقط باید بشتر تست بشه، نظرتون رو بگید....
کلاس CommandInfo:
Imports System.Text
Public Class CommandInfo
Sub New()
MyBase.New()
End Sub
Sub New(CommandLine As String)
MyBase.New()
Me.CommandLine = CommandLine
End Sub
Private CommandLineValue As String
Public Property CommandLine() As String
Get
Return CommandLineValue
End Get
Set(ByVal value As String)
CommandLineValue = value
Dim Expr As String = ""
If value.Contains(Space(1)) Then
Dim Length As SByte = InStr(value, Space(1)) - 1
KeyWordValue = value.Substring(0, Length)
Expr = value.Substring(Length + 1)
Me.ParametersValue = Expr
Me.OptionsValue.Clear()
Dim NewOption As Boolean = False
Dim Opt As OptionInfo = Nothing
Dim Words() As String = Expr.Split(Space(1))
For i = 0 To Words.Length - 1
If Words(i).StartsWith("-") Then
Opt = New OptionInfo(Words(i).Remove(0, 1))
Me.OptionsValue.Add(Opt)
Continue For
NewOption = True
End If
If Words(i).StartsWith("/") Then
If Opt Is Nothing Then
Me.Switches.Add(Words(i).Remove(0, 1))
Else
Opt.Switches.Add(Words(i).Remove(0, 1))
End If
Continue For
End If
If Words(i).StartsWith(Chr(34)) Then
For x = i To Words.Length - 1
Opt.Value += Words(x) + " "
If Words(x).EndsWith(Chr(34)) Then
i = x
Exit For
End If
Next
Else
Opt.Value += Words(i)
End If
Next
For Each Op As OptionInfo In Me.Options
Console.WriteLine("Option) Name: {0}, Value: {1}, Switchs: {2}", Op.Name, Op.Value, Op.Switches.Count)
Next
Else
KeyWordValue = value
End If
End Set
End Property
Private SwitchesValue As New List(Of String)
Public ReadOnly Property Switches() As List(Of String)
Get
Return SwitchesValue
End Get
End Property
Private KeyWordValue As String = ""
Public ReadOnly Property KeyWord() As String
Get
Return KeyWordValue
End Get
End Property
Public ReadOnly Property HasOptions() As Boolean
Get
Return Me.OptionsValue.Count > 0
End Get
End Property
Public ReadOnly Property HasOptions(Count As SByte) As Boolean
Get
Return Me.OptionsValue.Count = Count
End Get
End Property
Private OptionsValue As New OptionCollection
Public ReadOnly Property Options() As OptionCollection
Get
Return OptionsValue
End Get
End Property
Private ParametersValue As String
Public ReadOnly Property Parameters() As String
Get
Return ParametersValue
End Get
End Property
End Class
Public Class OptionCollection
Inherits List(Of OptionInfo)
Public Overloads Function Contains(Name As String) As Boolean
For Each O As OptionInfo In Me
If O.Name.Equals(Name, StringComparison.OrdinalIgnoreCase) Then
Return True
End If
Next
Return False
End Function
Default Public Shadows ReadOnly Property Item(Name As String) As String
Get
For Each O As OptionInfo In Me
If O.Name.Equals(Name, StringComparison.OrdinalIgnoreCase) Then
Return O.Value
End If
Next
Return ""
End Get
End Property
End Class
Public Class OptionInfo
Sub New()
End Sub
Sub New(name As String)
Me.NameValue = name
End Sub
Sub New(name As String, value As String)
Me.NameValue = name
Me.ValueValue = value
End Sub
Private NameValue As String = ""
Public Property Name() As String
Get
Return NameValue
End Get
Set(value As String)
NameValue = value
End Set
End Property
Private ValueValue As String = ""
Public Property Value() As String
Get
Return ValueValue.Replace(Chr(34),"")
End Get
Set(value As String)
ValueValue = value
End Set
End Property
Private SwitchesValue As New List(Of String)
Public ReadOnly Property Switches() As List(Of String)
Get
Return SwitchesValue
End Get
End Property
End Class
و دستورات ماجول اصلی:
Imports IWshRuntimeLibrary
Imports System.IO
Module Module1
Sub Main()
Dim CommandInf As New CommandInfo
With CommandInf
Do Until .KeyWord.ToLower = "exit"
Console.Write("{0}>", IO.Path.GetFullPath("."))
Try
.CommandLine = Console.ReadLine
Catch ex As Exception
Continue Do
End Try
Select Case .KeyWord.ToLower
Case "time"
Console.WriteLine("{0}Time:{1}", vbTab, Now.ToLongTimeString)
Case "cls"
Console.Clear()
Case "cd"
ChDir(.Parameters)
Case "files"
For Each D As String In IO.Directory.GetFiles(IO.Path.GetFullPath("."))
Console.WriteLine("{0}.\{1}", Space(2), IO.Path.GetFileName(D))
Next
Case "dirs"
For Each D As String In IO.Directory.GetDirectories(IO.Path.GetFullPath(". "))
Console.WriteLine("{0}.\{1}", Space(2), FileIO.FileSystem.GetName(D))
Next
Case "filelen"
Dim Path As String = .Parameters
If Path.Length = 0 Then Exit Select
Console.WriteLine("{0}File Length:{1}", vbTab, FileLen(Path))
Case "createshortcut"
Dim Target As String = ""
Dim ShortcutPath As String = ""
Dim WSH As New WshShell
' Console.WriteLine("{0}: {1}", .Parameters, .HasOptions)
If .Options.Contains("target") Then
Target = IO.Path.GetFullPath(.Options("target").Replace(Chr (34), ""))
Console.WriteLine("Target: {0}", Target)
Else
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine("createshortcut '-target' option is lost!")
Console.ResetColor()
End If
If .Options.Contains("path") Then
ShortcutPath = .Options("path").Replace(Chr(34), "")
If ShortcutPath.StartsWith("[Desktop]", StringComparison.OrdinalIgnoreCase) Then
ShortcutPath = WSH.SpecialFolders.Item("Desktop") + ShortcutPath.Substring(9)
Else
ShortcutPath = IO.Path.GetFullPath(ShortcutPath)
End If
Console.WriteLine("ShortcutPath: {0}", ShortcutPath)
Else
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine("createshortcut '-path' option is lost!")
Console.ResetColor()
End If
If .HasOptions(2) = False Then Exit Select
If ShortcutPath.Contains("*") Then
ShortcutPath = ShortcutPath.Replace("*", IO.Path.GetFileNameWithoutExtension(Target))
End If
If ShortcutPath.EndsWith(".lnk", StringComparison.InvariantCultureIgnoreCase) = False Then
ShortcutPath += ".lnk"
End If
Dim Shortcut As WshShortcut = WSH.CreateShortcut(ShortcutPath)
With Shortcut
.TargetPath = Target
.Save()
End With
Case Else
If .KeyWord.StartsWith("$env:", StringComparison.OrdinalIgnoreCase) Then
Dim env As String() = .KeyWord.Split(":")
Exit Select
End If
Dim DrvName As String = CommandInf.KeyWord + ""
For Each drv As IO.DriveInfo In My.Computer.FileSystem.Drives
Select Case drv.DriveType
Case IO.DriveType.NoRootDirectory, IO.DriveType.Ram, IO.DriveType.Unknown
Continue For
End Select
If DrvName.Equals(drv.Name, StringComparison.CurrentCultureIgnoreCase) Then
ChDir(drv.RootDirectory.FullName)
End If
Next
End Select
Loop
End With
End Sub
End Module