当我转到我的批处理文件的位置并打开它时,批处理文件可以正常工作。我的批处理文件很简单:
cd .\data
dir/b/o:n > names.txt
如您所见,我在当前目录中并向下移动到子目录“data”并处理所有名称并创建名为names.txt
的文件。
当我说
时shell "location of file"
它会打开批处理文件,但是默认的目录是C:\my documents
,因此我的命令无法正常工作,因为它无法找到子目录。我希望这是一个动态批处理文件,因此我需要在VBA中编写一些内容,在其当前目录下打开批处理文件或者这样做。
我该怎么做?
答案 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命令之前,该命令应该有效......
或者,您可以将批处理文件更改为使用绝对目录而不是相对目录。