Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

vb.net How to pass a string with spaces to the command line

I am trying to call an external program using Process:

    Dim strExe As String = "E:\Projects\Common Files\mktorrent.exe"
    Dim p As New Process
    Dim pinfo As New ProcessStartInfo
    pinfo.UseShellExecute = False
    pinfo.RedirectStandardOutput = True
    pinfo.Arguments = " -a http://blah.com/announce.php -l " & FileSizeMarker & " " & fn
    pinfo.FileName = strExe
    pinfo.WorkingDirectory = fn.Substring(0, fn.LastIndexOf("\"))
    pinfo.WindowStyle = ProcessWindowStyle.Normal
    pinfo.CreateNoWindow = True
    p.StartInfo = pinfo
    p.Start()

The problem is with the filename (variable fn above). If it has spaces, the command chokes - without spaces, it works fine. I have tried adding 1, 2 or3 quotes, like this:

    fn = Chr(34) & Chr(34) & Chr(34) & fn & Chr(34) & Chr(34) & Chr(34)

and also

    fn = "\") & Chr(34) & fn & "\"& Chr(34)

and many other combinations, but it still gives me an error. Any thoughts on how I can get this to work? TIA

like image 763
Chiwda Avatar asked Oct 12 '25 14:10

Chiwda


1 Answers

It's really an old - but unsolved - problem. My 2 cents of contribution.

Use CHR(34) before-and-after the string, delimiting it like:

Arg = "Name=" & chr(34) & "John Doe da Silva" & chr(34)

Just it!

like image 133
David BS Avatar answered Oct 16 '25 07:10

David BS