如何在Wscript.Shell + cmd.exe中使用变量?

How to use variables in Wscript.Shell + cmd.exe?

我正在尝试将变量替换为 wsh.run 命令中的路径(它应该启动一个批处理文件),但我在 DOS 控制台中收到错误消息:"The file name, directory name or volume label syntax is incorrect".

这里是有效的代码:

Sub TestDos()
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim fBatFile As String
Dim ErrorCode As Integer
Dim wkPath As String
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1

wkPath = Application.ActiveWorkbook.Path
fBatFile = wkPath & "\run.bat"

ErrorCode = wsh.Run("cmd.exe /c cd /d G:\Projects && G:\Projects\run.bat", windowStyle, waitOnReturn)
Debug.Print ErrorCode

End Sub

我试过:

ErrorCode = wsh.Run("cmd.exe /c cd /d wkPath && fBatFile", windowStyle, waitOnReturn)

或:

ErrorCode = wsh.Run("cmd.exe /K cd /d " & wkPath & fBatFile & "", windowStyle, waitOnReturn)

但它不起作用。 有谁能帮帮我吗?

我找到了解决方案:

ErrorCode = wsh.Run("cmd.exe /c cd /d " & wkPath & " && " & fBatFile, windowStyle, waitOnReturn)

我找不到一个清晰的网页来解释我们何时以及如何需要 '&' 和 ””。 官方文档对我来说非常晦涩。

总之,这次就算了!

P.S.: 如果我使用 "cmd.exe /k"(我保持 dos 控制台打开),而不是 '/c',VBA 编辑器给我一个 "Overflow" 错误。幸运的是,我需要在批处理文件的末尾关闭dos控制台。