43

我有一个固定的命令,我需要使用 VBA 将其传递给命令提示符,然后该命令应该运行。例如“perl a.pl c:\temp”

以下是我尝试使用的命令,但它只是打开命令提示符并且不运行命令。

Call Shell("cmd.exe -s:" & "perl a.pl c:\temp", vbNormalFocus)

请检查。

4

1 回答 1

63

S 参数本身不做任何事情。

/S      Modifies the treatment of string after /C or /K (see below) 
/C      Carries out the command specified by string and then terminates  
/K      Carries out the command specified by string but remains  

尝试这样的事情

Call Shell("cmd.exe /S /K" & "perl a.pl c:\temp", vbNormalFocus)

您甚至可能不需要将“cmd.exe”添加到此命令,除非您希望在运行此命令时打开命令窗口。Shell 应自行执行该命令。

Shell("perl a.pl c:\temp")



-编辑-
要等待命令完成,您必须执行@Nate Hekman 在他的回答中显示的操作here

Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1

wsh.Run "cmd.exe /S /C perl a.pl c:\temp", windowStyle, waitOnReturn
于 2013-07-30T20:33:08.917 回答