【问题标题】:vb.net pass folder path as commandline argumentvb.net 将文件夹路径作为命令行参数传递
【发布时间】:2016-08-11 08:07:25
【问题描述】:

我正在尝试通过命令行参数将文件夹路径传递给应用程序。

问题:我的文件夹路径在其字符串中包含空格 " "。当我在应用程序中读取命令行参数时,我的路径在空间" "

上被切成碎片
Sub Main()

    Dim arguments As String() = System.Environment.GetCommandLineArgs()
    For Each Arg As String In arguments
        Console.WriteLine("Argument : " & Arg)
    Next

    Console.ReadLine()

End Sub

编辑:添加代码来构建我的论点

Private Sub btn_Copy_Click(sender As Object, e As EventArgs) Handles btn_Copy.Click

    Dim args(3) As String
    args(0) = """" & tb_CopyFromPath.Text & """"
    args(1) = """" & tb_CopyToPath.Text & """"
    args(2) = """" & tb_ItemTag.Text & """"
    args(3) = """" & tb_Prefix.Text & """"

    Dim argument As String
    argument = args(0) & " " & args(1) & " " & args(2) & " " & args(3)

    Process.Start("J:\VB.NET - EM AddIn\EM_Design_AddIn\CopyDesign\bin\Debug\CopyDesign.exe", argument)
End Sub

这个结果不好。第一个路径的第一个参数现在包含第二个路径的一部分。


编辑:从调试中添加值结果。

"""C:\VaultWorkspace\cadcampc\03-Vessel configurator - R2.0\Nozzles\WN_RF_ASME_B16.5\"" ""C:\VaultWorkspace\cadcampc\03-Vessel configurator - R2.0\Test Copy Design\N03"" ""N3"" ""12345-3"""

【问题讨论】:

  • 您能否在调试时为Dim argument As String argument = args(0) & " " & args(1) & " " & args(2) & " " & args(3) 提供价值?
  • 我有个主意 :) 您是否有机会使用双引号输入 tb_CopyFromPath.Text 值?如果您在命令行中输入两个双引号"",它将像一个一样被接收。 (这是在参数中写双引号的方式)
  • 我添加了我的 msgbox 结果,如果需要调试,我将不得不更改一些输出设置以使事情顺利进行。
  • 好吧,我把结果改成调试值了,不好看。
  • @Mech_Engineer 双引号太多。每个参数应该只有一对。结果应该是 ""C:\VaultWorkspace\cadcampc\03-Vessel configurator - R2.0\Nozzles\WN_RF_ASME_B16.5\" "C:\VaultWorkspace\cadcampc\03-Vessel configurator - R2.0\Test Copy Design\N03 ""N3""12345-3""

标签: vb.net path command-line-arguments


【解决方案1】:

使用 CHR(34) 分隔带有空格的字符串。 在这里查看我的答案: vb.net How to pass a string with spaces to the command line

【讨论】:

    【解决方案2】:

    只需用双引号将其传递即可。

    即:

    app.exe "C:\Sub folder 1\Sub folder 2"
    

    如果你在代码中这样做:

    Process.Start("app.exe", """" & path & """")
    

    引号指定参数的开始和结束。


    编辑:

    在你的情况下,你可以这样做:

    argument = """" & args(0) & """  """ & args(1) & """ """ & args(2) & """ """ & args(3) & """"
    

    【讨论】:

    • 嗨!谢谢回复。我尝试实施您的答案,但没有这样做。我用更多细节编辑了这个问题。也许你能看出我做错了什么?
    • 我建议一些更正(添加修剪):Process.Start("app.exe", """" & path.Trim('""') & """")
    • @user2216 :单引号在该上下文中无效,如果路径已正确构建,例如 Path.Combine() 它不能包含任何双引号。
    • @VisualVincent 抱歉,我不能同意。如果添加一对双引号"file path",然后再添加一对""file path"",您将得到两个参数filepath
    • @user2216 :但"file path" 不是有效路径,OpenFileDialogs 等不返回引号。
    【解决方案3】:

    这很简单。只需使用"。 如果您传递test test test 参数,您将获得3 个参数。但是如果你写test "test test",你会收到两个参数:testtest test

    【讨论】:

      猜你喜欢
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 2015-02-20
      • 2019-02-15
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多