我正在尝试使用vba运行此cmd脚本,该脚本基本上合并目录中的所有csv文件,然后将每个文件的文件名添加到最后的列中。
for /f %a in ('dir /b *.csv') do for /f "tokens=*" %b in (%a) do echo %b,%a >> all.csv
我遇到的问题是如何在Excel Vba中运行此命令,同时在运行上述代码之前更改默认目录。
这是因为for /f %a in ('dir /b *.csv')
位只占用cmd窗口中的默认目录。在实际的cmd窗口中,我可以使用cd命令,但不知道如何使用vba自动执行此操作。
Link to the original post for the code
任何想法的人?
由于
答案 0 :(得分:0)
以下是从VBA excel运行代码的方法。我对路径进行了硬编码,因为我不确定你的输入法是什么。
Sub mergeCSV()
Dim myDir As String
myDir = "C:\Users\username\compile\"
Dim strCommand As String
strCommand = "for /f %a in ('dir /b *.csv') do for /f ""tokens=*"" %b in (%a) do echo %b,%a >> all.csv"
Call Shell("cmd.exe /k cd /d " & myDir & " & " & strCommand, 1)
End Sub
Shell
调用首先打开命令提示符,然后将当前目录更改为myDir
变量中指定的目录。然后它运行第二个命令,我将它放在它自己的变量strCommand
中,以便于阅读和遵循。您可以通过将/k
替换为/c
我有两个测试文件,一个有数字,一个有字母。结果文件all.csv
如下所示: