2012-11-21 64 views
0

在我的表单中,我在var中存储/创建一个命令行参数,稍后用一个控制按钮来启动它,以启动一个外部应用程序,该参数存储在我的var内部,var内容如下所示:VB.NET - 如何拆分字符串?

ExternalAPP.exe "Argument 1" "argument 2" "argument 3" "more arguments" 

PS:参数是对文件夹路径的引用。

而我需要做的是分裂VAR把所有的文件夹路径(参数),并让这样的事情:

' Pseudocode 
For each folder in var.split(ControlChars.Quote) 
    for each file in get.folder.files 
    appendline.(new_text_file, file.Name) 
    Next 

感谢,如果有人可以帮助我

UPDATE: 的,我需要拆分VAR的内容正是这样:

“F: - = =时空 - \ Documentos \ DVD Temazos \摇滚” “F: - =时空= - \ Documentos \ DVD Temazos \化工技术” “F: - =时空= - \ Documentos \ DVD Temazos \波普”

* 注意到该论坛不粘贴SLASH \ AFTER DRIVE LETTER F:*

回答

1

你应该尝试这样的事:

Dim var As String = "Command.exe ""F:-=Temporal=-\Documentos\DVD Temazos\Rock"" ""F:-=Temporal=-\Documentos\DVD Temazos\Techno"" ""F:-=Temporal=-\Documentos\DVD Temazos\Pop""" 
    var = var.Replace(":", ":\").Remove(0, var.IndexOf(" ") + 2) 
    Dim dirs As New List(Of String)(var.Split(New String() {""" """}, StringSplitOptions.RemoveEmptyEntries)) 
    Dim files As New List(Of String)() 

    For Each path As String In dirs 
     Try 
      If (Directory.Exists(path)) Then 
       files.AddRange(Directory.GetFiles(path)) 
      Else 
       Debug.Print(path & "path does not exists") ' check "Output Window" 
      End If 
     Catch ex As Exception 
      Debug.Print(path & ": exception :" & ex.Message) ' check "Output Window" 
     End Try 
    Next 

编辑:

我只是你的问题中注意到了这一点:

NOTICE THAT THE FORUM DOES NOT PASTED THE SLASH \ AFTER DRIVE LETTER F: 
+0

thankyou所以很多,但与您的代码我得到了另一个答案相同的例外:路径中的非法字符。在线:files.AddRange(Directory.GetFiles(路径)),真的我不知道如何解决,我不知道什么非法字符,或在哪里(文件夹内的文件文件名?) – ElektroStudios

+0

检查更新代码并发布在“输出窗口”中打印的文本 – NeverHopeless

+0

mscorlib.dll F:\ - = Temporal = - \ Documentos \ DVD Temazos \ Pop“中发生了类型'System.ArgumentException'的第一次机会异常:异常:非法字符 线程'vshost.RunParkingWindow'(0xee4)已退出,代码为0(0x0) 线程''(0xb30)已退出,代码为0(0x0) 程序'[2452] PlayLists。 vshost.exe:Program Trace'已退出,代码为0(0x0)。 程序'[2452] PlayLists.vshost.exe:Managed(v4.0.30319)'已退出,代码为0(0x0)。 – ElektroStudios

1

试试这个

dim Var As String = Command.exe "Argument 1" "argument 2" "argument 3" "more arguments" 

dim entries = Var.Split(" "c) 

For i As Integer = 1 To entries.Length - 1 
    dim files As String() = Directory.GetFiles(entries(i)) 
Next 
+0

谢谢,但它说“路径中存在非法字符”。在行中:Dim files As String()= Directory.GetFiles(entries(n)),为什么? – ElektroStudios

+0

我的“var”正是这个内容:“F:\ - = Temporal = - \ Documentos \ DVD Temazos \ Rock”“F:\ - = Temporal = - \ Documentos \ DVD Temazos \ Techno”“F:\ - = Temporal = - \ Documentos \ DVD Temazos \ Pop“ – ElektroStudios

+0

可能是因为您的文件名或文件夹路径包含非法字符,例如如果文件名中不需要空格。步骤通过你的代码,并检查条目(i)的值,以知道哪个文件名格式不正确 – codingbiz

1

你的示例代码不会做出很大的意义。它应该是命令行还是VB源代码?

但是,似乎你想要一个正则表达式来查找引号内的每个字符串。

正则表达式很繁琐,无法正确构建。我建议构建一个简单的正则表达式验证器,或者使用基于Web的一个验证器。

你的表达会是这样的(我不打算来验证这一点):

.*(\"(?<filepath>[^"])\")*.* 

你会希望得到所有的比赛组值的文件路径。

如果你控制你的程序输入,制作一个更容易解析的友好语法似乎是合适的。

如果这些是命令行参数,commmand shell会为你解析每个引用的参数,并且你的主例程的参数将会拥有它们。

我是一个C#的家伙,所以一个快速谷歌给了我这个:

子的Main()

Dim s() As String = System.Environment.GetCommandLineArgs() 

    Console.WriteLine(s(1)) 

末次

+0

感谢您的评论,您不要低估我的好,也许这是我的错(我的英语是穷人),看到其他人回答我,这就是我想要做的 – ElektroStudios

1

如果你想实现什么是解析命令行参数,试试这个:

Dim files() As String = System.Environment.GetCommandLineArgs() 

http://msdn.microsoft.com/en-us/library/system.environment.getcommandlineargs.aspx

这条线:

Var = Command.exe "Argument 1" "argument 2" "argument 3" "more arguments" 

也许不会那么做你想要的。双引号字符必须包围整个字符串进行转义:

Var = "Command.exe ""Argument 1"" ""argument 2"" ""argument 3"" ""more arguments""" 
+0

对不起,但不是我所需要的,我已经重新更新了我的第一个coment,抱歉所有这个confussion – ElektroStudios