【问题标题】:Execute a command in command prompt using excel VBA使用 excel VBA 在命令提示符下执行命令
【发布时间】:2013-07-31 04:02:08
【问题描述】:

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

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

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

请检查。

【问题讨论】:

  • 你实际上甚至不需要先打开 cmd.exe -> Shell() 可以将你的 perl args 直接传递给 perl.exe

标签: vba excel shell command-line


【解决方案1】:

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

【讨论】:

  • 请记住,shell 将在启动进程后返回。它不会等待你的 Perl 脚本完成,只是说。
  • 非常感谢。这很好用。 “等待我的 Perl 脚本完成”的代码是什么?
  • 我认为必须做类似this
  • 如果不是固定命令,我需要从 excel 单元格传递变量之一,那么我该怎么做?到目前为止,我已经尝试过以下方式(X 是可变的)wsh.Run "cmd.exe /S /C perl a.pl" & X & "100", windowStyle, waitOnReturn跨度>
  • 另一种等待命令完成的方法是使用 CreateProcessA 函数。有关 VBA 代码,请参阅这篇 Microsoft 文章“确定外壳进程何时结束”docs.microsoft.com/en-us/office/vba/access/concepts/windows-api/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多