Excel VBA:运行shell脚本以更改目录,然后运行自定义脚本

时间:2016-01-18 17:15:50

标签: shell excel-vba csv vba excel

我正在尝试使用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

任何想法的人?

由于

1 个答案:

答案 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如下所示:

enter image description here