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,响应缓慢。我重新措辞了这个问题,并尽我所能补充了所有细节。检查此链接。[我已经回答了新问题。我怀疑你会让主持人了解你。他们不喜欢回答一半的问题。你应该更新这个问题,而不是开始另一个问题。这是对问题的更好描述。不过谢谢你的回答。