2014-12-02 32 views
3

我有一个excelfile(Excel 2011,运行在OSX 10.9.4上)将其数据导出到文本文件中。我想在导出后自动将这个文本文件上传到Git。我如何让我的“终端”命令从vba(在OSX上)运行在正确的文件夹中

我使用了这篇文章中描述的execShell函数: VBA Shell function in Office 2011 for Mac 这给了我很好的执行命令输出。我想要去我的文件夹(我的新文件被放置),并从那里调用我的git commit命令(“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) 

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

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

回答

3

每当你打电话给execShell它启动一个新的shell。该shell执行该命令,然后退出。所以你的新shell改变目录for that shell然后退出。您执行的下一个新shell将从您最后一个开始的地方开始 - 不是它退出的地方,因为它是一个新的,不同的进程。

你需要做的所有事情在一个壳:

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

以上只会做每个后续命令如果前面是成功的,如果你要无条件地执行其他命令,无论前一个失败,用分号分隔命令:

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

是的,这就是它,谢谢! – 2014-12-09 12:38:14

相关问题