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

Jas*_*son 8 windows vba cmd batch-file

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

cd .\data
dir/b/o:n > names.txt
Run Code Online (Sandbox Code Playgroud)

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

当我说

shell "location of file" 
Run Code Online (Sandbox Code Playgroud)

它会打开批处理文件,但是默认的目录是C:\my documents,所以我的命令无法工作,因为它找不到子目录.我希望这是一个动态批处理文件,因此我需要在VBA中编写一些东西,它将打开当前目录下的批处理文件或此类效果.

我该怎么做呢?

Ton*_*ore 8

以下内容应该为您提供所寻求的效果.

我的测试代码是:

Option Explicit
Sub TryShell()

  Dim PathCrnt As String

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

End Sub
Run Code Online (Sandbox Code Playgroud)

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

cd %1
dir *.* >TryShell.txt
Run Code Online (Sandbox Code Playgroud)

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

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

当我打电话时Shell,我已添加PathCrnt为参数.

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

dir命令按我的意愿工作,因为当前目录是我的目录而不是系统默认目录.

希望这很清楚.


ass*_*ias 2

C:\My Documents 可能是电子表格所在的目录。如果你添加

ChDir "C:\TheFolderWhereYourBatchIs"
Run Code Online (Sandbox Code Playgroud)

在启动 Shell 命令之前,这应该可以工作......

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