2017-01-30 111 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