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

8
当我进入批处理文件的位置并打开它时,批处理文件可以正常工作。我的批处理文件非常简单:
```batch

code

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

您看到了,我正在当前目录下进入子目录"data"并复制所有名称,创建了一个名为names.txt的文件。

当我说

shell "location of file" 

它打开了批处理文件,但默认的目录是C:\my documents,所以我的命令不起作用,因为找不到子目录。我希望这个批处理文件是动态的,因此我需要在VBA中编写一些内容,以便在其当前目录下打开批处理文件或类似操作。

我该怎么做呢?


为了易读性,请花些心思正确格式化和拼写您的问题。这次我已经帮您修复了。请注意,可以使用“{}”按钮将代码格式化为代码。 - Jean-François Corbett
2个回答

8
以下内容将帮助您实现所需的效果。
我的测试代码如下:
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命令按照我希望的方式工作。
希望这很清楚。

仍然存在同样的问题。我认为如果有人知道DOS中调用文件当前位置的命令,将该位置存储为变量,然后使用变量名更改目录{cd variable_name}会更容易。这将获取正确的位置,然后我就可以运行批处理文件了。 - Jason
我不明白“仍然相同的问题”。如果宏知道批处理文件的位置,它可以正确调用批处理文件并将位置作为参数传递。我已经使用了ActiveWorkbook.Path作为我的测试文件夹,因为这对我来说很方便,但您也可以将其更改为其他内容。如果宏不知道批处理文件的位置,那么如何有一个DOS命令可以找到它呢? - Tony Dallimore
有什么我忽略的变化吗,还是你还没有添加完整的细节? - Tony Dallimore
抱歉Toney,回复有些慢。我已经重新表述了问题,并添加了尽可能详细的信息。请查看此链接:[http://stackoverflow.com/questions/9442467/calling-batch-file-in-vba-not-working-properly] - Jason
另外,你的Activeworkbook.path是我所做的事情更简单的方法。谢谢你的提示! - Jason
1
我已经回答了新问题。我怀疑管理员会找你麻烦的。他们不喜欢留下一堆未完全回答的问题。你应该更新这个问题而不是开始另一个。 - Tony Dallimore

2

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

ChDir "C:\TheFolderWhereYourBatchIs"

在启动您的Shell命令之前,您需要使用cd命令更改到正确的目录,然后它应该可以正常工作...

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


这是一个关于调用VBA批处理文件不正常工作的问题的更好描述。感谢您的回复。 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接