2017-01-30 108 views
1

我有下面的VBA代码,我试图在cmd中运行。路径中有一个空格,我使用引号来处理这个问题。在VBA中处理文件路径中的空间

strWot2Shell = """C:\Program Files\gs\gs9.20\bin\gswin64.exe""" & " -dBATCH -dNOPAUSE -sDEVICE=png16m -r600 -sOutputFile=" & Chr(34) & ripDirectory & "\LagerRiskRapport%01d.png" & Chr(34) & " " & Chr(34) & filePathAndFileName & Chr(34) 
strWot2Shell = Replace(strWot2Shell, "\", "/") 
strWot2Shell2 = "cmd.exe /S /C " & strWot2Shell 
wsh.Run strWot2Shell2, windowStyle, waitOnReturn 

从下面的代码的输出:

cmd.exe /S /C "C:/Program Files/gs/gs9.20/bin/gswin64.exe" -dBATCH -dNOPAUSE -sDEVICE=png16m -r600 -sOutputFile="G:/Rip/LagerRiskRapport%01d.png" "G:/LagerRiskRapport.pdf" 

当我在cmd运行此照片直接获得:

'C:/Program' is not recognized as an internal or external command, 
operable program or batch file. 

如果我下面直接在cmd运行它的工作原理

"C:/Program Files/gs/gs9.20/bin/gswin64.exe" -dBATCH -dNOPAUSE -sDEVICE=png16m -r600 -sOutputFile="G:/Rip/LagerRiskRapport%01d.png" "G:/LagerRiskRapport.pdf" 

三重引用所有的字符串是这样的:

strWot2Shell = """C:\Program Files\gs\gs9.20\bin\gswin64.exe""" & """ -dBATCH -dNOPAUSE -sDEVICE=png16m -r600 -sOutputFile=""" & Chr(34) & ripDirectory & """\LagerRiskRapport%01d.png""" & Chr(34) & " " & Chr(34) & filePathAndFileName & Chr(34) 

给出了这样的输出:

cmd.exe /S /C "C:/Program Files/gs/gs9.20/bin/gswin64.exe"" -dBATCH -dNOPAUSE -sDEVICE=png16m -r600 -sOutputFile=""G:/Rip"/LagerRiskRapport%01d.png"" "G:/LagerRiskRapport.pdf" 

"cmd.exe /S /C"结果The system cannot find the path specified引号引起cmd.exe /S /C

为什么报价不起作用?

+0

如何输出应该看起来像要使其可以运行?如果复制VBA输出并将其手动写入cmd,它是否运行正常? – Vityata

+0

@Vityata我已更新帖子。当我运行'cmd.exe/S/C ,,,它不起作用,但运行只是'C:/ Progrmas ,,,'的作品。 – g3blv

+0

你可以试试这个:'wsh.Run =“cmd.exe/S/C”&strWot2Shell,windowStyle,waitOnReturn' – Vityata

回答

0

这可能是因为你在一开始就是三重引用,而不是结尾。因此,尝试改变这个:

"""C:\Program Files\gs\gs9.20\bin\gswin64.exe""" & " -dBATCH -dNOPAUSE -sDEVICE=png16m -r600 -sOutputFile=" & Chr(34) & ripDirectory & "\LagerRiskRapport%01d.png" & Chr(34) & " " & Chr(34) & filePathAndFileName & Chr(34) 

要:

"""C:\Program Files\gs\gs9.20\bin\gswin64.exe""" & "" -dBATCH -dNOPAUSE -sDEVICE=png16m -r600 -sOutputFile="" & Chr(34) & ripDirectory & ""\LagerRiskRapport%01d.png"" & Chr(34) & " " & Chr(34) & filePathAndFileName & Chr(34) 
+0

我给了一次尝试,结果在字符串中不应该有任何引号的引号。我已经用结果更新了问题。 – g3blv

+0

好吧,我的错误,它看起来应该是双引号而不是三重。我已经更新了我的答案 - 看看这是否有效。 –

+0

使用双引号会在'%01d'处出现错误 – g3blv