传递参数和文件名?

时间:2011-10-21 10:30:05

标签: windows vb.net

我需要编写一个VB.Net Winform应用程序,该应用程序通过资源管理器中的Windows上下文菜单调用,并且可以采用多个参数,其中最后一个参数是包含空格的文件的完整路径。

我尝试了以下作为参数,但无济于事:

This is a test "%1" -> this
"This is a test "%1"" -> This is a test C:\Program
"This is a test" "%1" -> This is a test
"This is a test "%1%"" -> This is a test

有人知道如何让Windows传递文件名的完整路径吗?

谢谢。

1 个答案:

答案 0 :(得分:3)

Windows正在传递完整路径。你只是在解析它时遇到了麻烦。

This is a test "%1" -> This is a test "C:\Program Files\Blah blah"
-> cmdArgs(0) = "This"
-> cmdArgs(1) = "is"
-> cmdArgs(2) = "a"
-> cmdArgs(3) = "test"
-> cmdArgs(4) = "C:\Program Files\Blah blah"

在上面的示例中,由于短语“This is a test”中的单词周围没有引号,因此它们将作为单独的命令行参数传递。

"This is a test "%1"" -> "This is a test "C:\Program Files\Blah blah""
-> cmdArgs(0) = "This is a test "
-> cmdArgs(1) = "C:\Program"
-> cmdArgs(2) = "Files\Blah"
-> cmdArgs(3) = "blah"

在第二个示例中,在%1终止第一个参数之前插入的引号,保留实际文件名不加引号。

"This is a test" "%1" -> "This is a test" "C:\Program Files\Blah blah"
-> cmdArgs(0) = "This is a test"
-> cmdArgs(1) = "C:\Program Files\Blah blah"

在第三个例子中,两个参数分别引用,因此它们作为程序的两个参数干净地到达。这是你应该使用的那个。您的问题是,您只关注cmdArgs(0)而忽略其余cmdArgs中的其他内容。特别是,您忘了查看文件名所在的cmdArgs(1)