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

Windows 使用VBA在给定目录中运行批处理文件,windows,vba,batch-file,cmd,Windows,Vba,Batch File,Cmd,当我转到批处理文件的位置并打开它时,批处理文件工作。我的批处理文件是: cd .\data dir/b/o:n > names.txt 如您所见,我在当前目录中,向下移动到子目录“data”,处理所有名称,并创建一个名为names.txt的文件 当我说 shell "location of file" 它打开批处理文件,但默认的目录是C:\my documents,因此我的命令无法工作,因为它找不到子目录。我希望这是一个动态批处理文件,因此我需要在VBA中编写一些东西,以在其当前目录

当我转到批处理文件的位置并打开它时,批处理文件工作。我的批处理文件是:

cd .\data
dir/b/o:n > names.txt
如您所见,我在当前目录中,向下移动到子目录“data”,处理所有名称,并创建一个名为
names.txt
的文件

当我说

shell "location of file" 
它打开批处理文件,但默认的目录是
C:\my documents
,因此我的命令无法工作,因为它找不到子目录。我希望这是一个动态批处理文件,因此我需要在VBA中编写一些东西,以在其当前目录下打开批处理文件或类似的内容


我如何做到这一点?

C:\我的文档可能就是您的speadsheet所在的目录。如果你加上

ChDir "C:\TheFolderWhereYourBatchIs"
在启动Shell命令之前,这应该可以工作


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

以下内容将为您提供所需的效果

我的测试代码是:

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
命令按我的意愿工作,因为当前目录是我的目录,而不是系统默认目录


希望这是清楚的。

为了便于阅读,请在正确设置问题格式和拼写上下功夫。这次我帮你修好了。请注意,可以使用
{}
按钮将代码
格式化为code
。问题仍然相同。我认为,如果有人知道DOS中的一个命令,该命令将调用文件的当前位置(无论在何处),将该位置存储为变量,然后使用变量名{cd variable_name}更改目录,那么会更容易些。这将获得正确的位置,然后我可以运行批处理文件。我不理解“仍然存在相同的问题”。如果宏知道批处理文件的位置,它可以正确调用批处理文件,并可以将该位置作为参数传递。我使用了
ActiveWorkbook.Path
作为我的测试文件夹,因为这对我来说很方便,但您可以将其更改为其他文件夹。如果宏不知道批处理文件的位置,怎么会有DOS命令可以找到它。是否有我忽略的更改或您尚未添加完整的详细信息。抱歉,Toney,响应缓慢。我重新措辞了这个问题,并尽我所能补充了所有细节。检查此链接。[我已经回答了新问题。我怀疑你会让主持人了解你。他们不喜欢回答一半的问题。你应该更新这个问题,而不是开始另一个问题。这是对问题的更好描述。不过谢谢你的回答。