我是这个论坛的新手,所以如果我以错误的方式提出这个问题或者不够具体,请纠正我。 在VB.NET中进行编码时,我试图传递多个命令,并且参数包含对路径的引用:
Dim p As New Process
Dim pi As New ProcessStartInfo
pi.Arguments = " " & "/K """ & "C:\program files\gdal\gdalshell.bat" & """ & " & "cd C:\program files\gdal" & _
" & " + "gdal_translate" + " -of Jpeg -outsize 2000 2000 """ & "D:\box sync\my box (907070)\RIS_RHDHV_Overgang\GDAL\test2.xml" & """ "
pi.FileName = "C:\windows\syswow64\cmd.exe"
p.StartInfo = pi
p.Start()
命令提示符返回: ' C:\ PROGRAM'不被识别为内部或外部命令,可操作程序或批处理文件。
我对此事做了一些研究,发现: vb.net How to pass a string with spaces to the command line
然而,这仍然无法解决问题。当我执行以下代码时,它运行没有问题:Dim p As New Process
Dim pi As New ProcessStartInfo
pi.Arguments = " " & "/K """ & "C:\program files\gdal\gdalshell.bat" & """ & " & "cd C:\program files\gdal" & _
" & " + "gdal_translate"
pi.FileName = "C:\windows\syswow64\cmd.exe"
p.StartInfo = pi
p.Start()
对我而言,问题似乎是由参数内的路径引用引起的。我已经阅读并使用了不同的答案来使用多个命令,没有任何运气。
如果有人可以帮我解决这个话题,那将会很棒。
亲切的问候,
斯图尔特
答案 0 :(得分:0)
首先,作为一个小注释,您不需要在参数的开头添加空格。只有当您将整个命令(包括可执行文件)写入一行时才会这样做。
现在,将路径作为参数传递的正确方法是用引号括起来。所以这样的事情应该做:
(请注意,我还缩短了一些不必要的连接等。)
pi.Arguments = "/K """"C:\program files\gdal\gdalshell.bat"" & cd ""C:\program files\gdal"" & " & _
"gdal_translate -of Jpeg -outsize 2000 2000 ""D:\box sync\my box (907070)\RIS_RHDHV_Overgang\GDAL\test2.xml"""""
修改强>
我发现您还需要在/K
之后将整个文本放在引号中才能生效。