Shell命令无法返回正确的结果

时间:2019-07-15 17:04:22

标签: vba command-line

在我的程序中,我想执行以下命令:

RetVal = Shell("dir > temp", 1)

当我这样做时,出现以下错误:

  

运行时错误“ 53”:找不到文件。

仅仅做Shell("dir", 1)也会给我同样的错误。但是,如果我做Shell("help", 1),它就可以工作。

dir > temp命令在命令窗口中可以正常工作。我尝试通过以下命令使用Shell:dircdvertimedatehelp。其中唯一有效的方法是help

我希望在执行Shell("dir > temp", 1)时会得到一个目录列表,表明我可以使用temp进行其他操作。而是显示“找不到文件”。

1 个答案:

答案 0 :(得分:2)

并非所有传递给Shell函数的命令都将像在“命令提示符”窗口中一样起作用。 Shell函数旨在运行可执行文件,而不执行命令:

  

运行可执行程序并返回一个Variant(Double)表示   程序的任务ID(如果成功);否则,它将返回零。

像Windows中的“运行”实用程序那样思考它。

您应该做的是先调用“ cmd.exe”,然后将所需的任何参数/命令传递给它。尝试这样的事情:

Dim myCommand As String
myCommand = "dir"
Shell "cmd.exe /S /K" & myCommand, vbNormalFocus

如果要在执行命令后关闭命令提示符窗口,则可以将参数/K替换为/C。在这种情况下,您可能还想使用vbHide而不是vbNormalFocus

myCommand = "dir > temp"
Shell "cmd.exe /S /C" & myCommand, vbHide