如何通过使用VBA调用Windows Shell来连接文件

时间:2016-10-31 14:34:34

标签: excel vba excel-vba shell

我正在尝试在Excel中编写一些VBA,它将通过在Windows Shell中执行data.tablecopy命令来连接.csv文件。

此代码成功创建了一个空文件more(其他文件将连接到其中):

concat_target.txt

但是,此代码没有将Shell ("cmd.exe copy /b NUL " & """\\path\to\network\folder\concat_target.txt""") 保存为file_1.txt(跳过标题)的预期效果:

file_1.concat_temp

事实上,我尝试过的Shell ("cmd.exe more +1 " & """\\path\to\network\folder\file_1.txt""" & " > " & """\\path\to\network\folder\file_1.concat_temp""") 调用的每个变体都会弹出一个控制台(保持打开状态),而对more的调用却没有。 UNC的网络路径诅咒了它的空间。

更新

事实证明,向copy命令添加/c标志可以解决问题(虽然它似乎对more的调用没有影响)。所以这段代码具有预期的效果:

copy

一旦完成,我将为后代发布完整的解决方案。

1 个答案:

答案 0 :(得分:0)

我不知道你为什么使用'更多',但我会使用其他方法:

Shell ("cmd.exe /c type ""\\path\to\network\folder\file_1.txt"" >> ""\\path\to\network\folder\file_1.concat_temp""")

注意:

  • 使用'>'重定向将覆盖该文件,丢失以前的内容
  • 使用'>>'重定向将附加文件(连接)
  • 如果字符串中的每个元素都是“&”,则无需将它们分开(但我猜您已经知道了)
  • 无需先创建空文件。

<强>更新

OP正在使用'more'来排除.csv表头,因为我之前没有理解过。 所以'type'命令在这种情况下不起作用。