使用Tortoise SVN中的VBA删除文件



我需要在Tortoise SVN环境中通过Excel VBA删除(删除(文件(可能还有文件夹(。无论我如何更改命令,它都会删除文件所在的文件夹。

调用obj.Run("TortoiseProc.exe/command:remove/pathfile:"C:\someSVNpath\123.txt"/colosonend:1"(

调用obj.Run("TortoiseProc.exe/command:remove/pathfile:"C:\someSVNpath\Folder""/colosonend:1"(

我也试图列出循环中的文件并删除,但随后出现错误:Subversion报告了一个错误:上一个操作尚未完成;如果"cleanup"被中断,请运行它。请执行"清理"命令。

此外,即使我设法列出循环中的文件并删除,提交操作也找不到任何要提交的文件。

Dim obj, FSO, folder, file As Object
Dim b, c, p(1 To 2) As String
Set obj = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
b = "C:someSVNlocationfolder"
With ThisWorkbook.Sheets("Equity")
p(1) = "loc1"
p(2) = "loc2"

For i = 1 To 2
If p(i) <> "" Then
c = b & "" & p(i) & ""
Set folder = FSO.GetFolder(c)
For Each file In folder.Files
d = c & file.Name
Call obj.Run("TortoiseProc.exe /command:remove /path:""" & d & """ /closeonend:1 ")
d = ""
Next file
End If
Next

Call obj.Run("TortoiseProc.exe /command:commit /path:""" & p(1) & """ * """ & p(2) & """ ")
End With

我认为您的主要问题是没有等待shell返回。这些操作很可能是异步运行的,并且彼此重叠运行。这是一种种族状况。

我通过将, 1, True添加到.Run命令的末尾来解决此问题。CCD_ 3是CCD_;激活并显示一个窗口。如果窗口最小化或最大化,系统会将其恢复到原始大小和位置。应用程序应在首次显示窗口时指定此标志">

末尾的TruebWaitOnReturn,指示脚本是否应等待程序完成执行,然后再继续执行脚本中的下一条语句。

你声明变量的方式,它们都是变体。Dim需要每个变量都有一个类型。此外,Call也被弃用。

尝试在此基础上构建:

Public Sub CallTortoise()
Dim wShell As Object
Set wShell = CreateObject("WScript.Shell")
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")

Dim svnPath As String
svnPath = "C:someSVNlocationfolder"

With ThisWorkbook.Sheets("Equity")
Dim p(1 To 2) As String
p(1) = "loc1"
p(2) = "loc2"

Dim i As Long
For i = 1 To 2
If p(i) <> "" Then
Dim thisPath As String
thisPath = FSO.BuildPath(svnPath, p(i))
Dim folder As Object
Set folder = FSO.GetFolder(thisPath)
Dim file As Object
For Each file In folder.Files
Dim deletePath As String
deletePath = FSO.BuildPath(thisPath, file.Name)
wShell.Run "TortoiseProc.exe /command:remove /path:""" & deletePath & """ /closeonend:1 ", 1, True
deletePath = ""
Next file
End If
Next i

wShell.Run "TortoiseProc.exe /command:commit /path:""" & svnPath & p(1) & "*" & svnPath & p(2) & """ ", 1, True
End With
End Sub

最新更新