我如何让我的“terminal”命令从vba(在OSX上)正确的文件夹中运行

我有一个excelfile(Excel 2011,在OSX 10.9.4上运行),它将数据导出到一个文本文件中。 一旦导出,我想自动将这个文本file upload到Git。

我使用这篇文章中描述的execShell函数: Office 2011 for Mac中的VBA Shell函数为我执行的命令提供了很好的输出。

我想要去我的文件夹(我的新文件被放置),并从那里调用我的git提交命令(“git add *”,“git commit -m commitmessage”和“git push”)。 但问题是我无法进入我的文件夹。 如果我尝试cd /Users/username/folder ,然后pwd我不断回到“/”作为位置(从我不能调用我的git命令)

完整的代码如下所示:

 commitMessage = """New feature file: " & ActiveSheet.Name & """" gotoPath = Replace(Replace(CurDir(), ":", "/"), "Macintosh HD", "") 'make a "normal" path from CurDir() result = execShell("cd " & gotoPath, exitCode) result = execShell("pwd", exitCode) result = execShell("git add *", exitCode) result = execShell("git commit -m """ & commitMessage & """", exitCode) result = execShell("git push", exitCode) 

如果我从terminal自己执行我的git命令(而在正确的文件夹中),提交工作正常。 如果我用execShell函数执行“say”命令,它也可以正常工作

任何人有什么build议如何到达正确的位置? 或用于此目的的替代品?

每次调用execShell都会启动一个新的shell。 该shell执行该命令,然后退出。 所以你的新shell会改变for that shell目录然后退出。 你执行的下一个新shell将在你最后一个开始的地方开始,而不是它离开的地方,因为它是一个新的,不同的进程。

你需要在一个shell中完成所有的事情:

 execShell("cd somewhere && do something && do something else") 

如果前面的成功,上面只会执行每个后续的命令。如果你想无条件地执行额外的命令,不pipe前面的命令是否失败,用一个分号分隔命令:

 execShell("cd somewhere; do something; do something else")