Excel VBA如何在当前目录的文件夹中执行BAT文件

时间:2015-03-31 08:43:43

标签: excel-vba vba excel

我无法执行位于运行宏的excel表当前目录内的文件夹中的bat文件。

我现在有这个。

Shell "cmd.exe /k cd /d" & ThisWorkbook.PATH & " && Comms.BAT"

如果BAT文件位于当前目录中,我希望它从位于目录中的文件夹运行,例如

Curr Dir \ Comms \ Comms.BAT

我试过这个

Shell "cmd.exe /k cd /d" & ThisWorkbook.PATH & " && \Comms\Comms.BAT"

和这个

Shell "cmd.exe /k cd /d" & ThisWorkbook.PATH & "\Comms\Comms.BAT"

2 个答案:

答案 0 :(得分:1)

您的第一个示例似乎是使用绝对路径(\ Comms):

Shell "cmd.exe /k cd /d" & ThisWorkbook.PATH & " && \Comms\Comms.BAT"

尝试使用相对路径:

Shell "cmd.exe /k cd /d" & ThisWorkbook.PATH & " && .\Comms\Comms.BAT"

<强>更新

  

...如果我使用你的例子然后尝试从当前目录执行批处理,它需要从cur dir / Comms /

执行它

如果我理解正确,您的批处理文件需要当前工作目录为包含批处理文件的目录。在这种情况下,您有两种选择:

  1. 切换到包含批处理文件的目录:

    Shell "cmd.exe /k cd /d" & ThisWorkbook.PATH & "\Comms && Comms.BAT"
    
  2. 更改批处理文件以切换到正确的目录。您可以通过将以下行添加到Comms.BAT顶部来执行此操作:

    cd /d "%~dp0"
    
  3. 更新2

    如果包含工作簿的路径可以包含空格,则需要在命令行中添加引号,如AnalystCave.com的答案中所述。例如:

        Shell "cmd.exe /k cd /d """ & ThisWorkbook.PATH & "\Comms"" && Comms.BAT"
    

答案 1 :(得分:0)

试试这个:

Set wsh = VBA.CreateObject("WScript.Shell")
wsh.Run """" & ActiveWorkbook.Path & "\Comms\Comms.BAT" & """"
Set wsh = Nothing

额外&#34;是为了防止文件名带有空格的问题。