使用VBA在给定目录中运行batch file

当我去到我的batch file的位置并打开它时,batch file工作。 我的batch file很简单:

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

正如你所看到的,我在我的当前目录下移动到子目录“data”,并且处理所有的名字并创build一个名为names.txt的文件。

当我说

 shell "location of file" 

它会打开batch file,但是默认的目录是C:\my documents ,所以我的命令不起作用,因为它找不到子目录。 我希望这是一个dynamic的batch file,因此我需要在VBA中写一些将在当前目录下打开batch file的东西。

我该怎么做呢?

以下应该给你你想要的效果。

我的测试代码是:

 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命令按我所希望的方式工作,因为当前目录是我的目录,而不是系统默认目录。

希望这是明确的。

C:\我的文档可能是您的电子表格所在的目录。 如果你添加

 ChDir "C:\TheFolderWhereYourBatchIs" 

之前启动您的Shell命令,应该工作…

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