我想一些参数传递给一个小程序,我写的。 它是一种程序,预计2个参数。 当我这样称呼它:
d:\littleProgram.exe d:\test\folder\ test.pdf
它工作正常。
但是,当我试试这个:
d:\littleProgram.exe d:\test 2\folder\ test.pdf
它认为是获得3个参数...
我想这样的行情:
d:\littleProgram.exe "d:\test 2\folder\" test.pdf
没运气。
这是VB代码:
Module Module1
Sub Main(ByVal sArgs() As String)
If sArgs.Length = 0 Then
... some code
ElseIf sArgs.Length = 2 Then
... some code
End If
End Sub
End Module
命令行参数是空格分隔。
如果你需要传递一个参数,比如有(或可能有)的文件名空间,你可以用双引号括起来。
唯一的例外情况是当争吵结束于\
在这种情况下,你必须与其他逃避这个\
所以你的情况,这是你所需要的:
d:\littleProgram.exe "d:\test 2\folder\\" "test.pdf"
所以,你的代码应该是这样的:
For i As Integer = 0 To My.Application.CommandLineArgs.Count - 1
Debug.Writeline(My.Application.CommandLineArgs(i))
Next
输出:
d:\test 2\folder\
test.pdf
一个简单的办法可能是删除尾随斜线,并添加目录和文件名使用起来Path.Combine
或只是通过完全限定名作为参数(括在双引号)
问题是,当我使用以防万一第一个参数报价,我其实是逃避关闭qoute:
d:\littleProgram.exe "d:\test 2\folder\" test.pdf
现在,这正常工作:
d:\littleProgram.exe "d:\test 2\folder" test.pdf
在把\程序的代码内线组合
该参数解析HAR转义字符一些奇怪的规则,它是\"
中引起该问题的争论字符组合,这是与一个问题CommandLineToArgvW
在Windows的方法。例如,见文章命令行ARGS在\结束”受CommandLineToArgvW whackiness
获取非解析命令行,解析它来获得参数预期:
Dim arguments As String() = _
Regex.Matches(Environment.CommandLine, "(?:""[^""]*""|[^ ]+)") _
.Cast(Of Match)().Select(Function(m) m.Value).Skip(1).ToArray()
注:此分析不处理转义序列的原始方法,所以你不能例如使用""
或\"
带引号的参数里面放了引号的,如果你想用原来的方法,你。需要按照它的转义规则和参数都必须写成:
d:\littleProgram.exe "d:\test 2\folder\\" test.pdf