使用VBA在给定目录中运行批处理文件

时间:2012-02-22 21:29:47

标签: windows vba batch-file cmd

当我转到我的批处理文件的位置并打开它时,批处理文件可以正常工作。我的批处理文件很简单:

cd .\data
dir/b/o:n > names.txt

如您所见,我在当前目录中并向下移动到子目录“data”并处理所有名称并创建名为names.txt的文件。

当我说

shell "location of file" 

它会打开批处理文件,但是默认的目录是C:\my documents,因此我的命令无法正常工作,因为它无法找到子目录。我希望这是一个动态批处理文件,因此我需要在VBA中编写一些内容,在其当前目录下打开批处理文件或者这样做。

我该怎么做?

2 个答案:

答案 0 :(得分:7)

以下内容可以为您提供所寻求的效果。

我的测试代码是:

Option Explicit
Sub TryShell()

  Dim PathCrnt As String

  PathCrnt = ActiveWorkbook.Path
  Call Shell(PathCrnt & "\TryShell.bat " & PathCrnt)

End Sub

我的测试批处理文件名为TryShell.bat,包含:

cd %1
dir *.* >TryShell.txt

我已将批处理文件放在与包含宏的工作簿相同的文件夹中。

语句PathCrnt = ActiveWorkbook.Path将PathCrnt设置为包含活动工作簿的目录的名称。您可以将PathCrnt设置为您需要的任何目录。

当我致电Shell时,我添加了PathCrnt作为参数。

在我的批处理文件中,我将当前目录设置为%1,这是第一个参数。

dir命令可以正常工作,因为当前目录是我的目录而不是系统默认目录。

希望这很清楚。

答案 1 :(得分:1)

C:\ My Documents可能是您的speadsheet所在的目录。如果你添加

ChDir "C:\TheFolderWhereYourBatchIs"

在启动Shell命令之前,该命令应该有效......

或者,您可以将批处理文件更改为使用绝对目录而不是相对目录。