Apenas um adendo a todas as boas respostas acima, caso alguém não perceba como é fácil em VB / C # automatizar todo o processo até o arquivo zip.
Então, você apenas pega um aplicativo Formulários simples dos modelos (se ainda não tiver um aplicativo de manutenção) e adiciona um botão a ele e, em seguida, o ClickOnce o instala em sua área de trabalho sem se preocupar com configurações especiais ou muito de qualquer coisa. Este é todo o código que você precisa para anexar ao botão:
Imports System.IO.Compression
Private Sub btnArchive_Click(sender As Object, e As EventArgs) Handles btnArchive.Click
Dim src As String = "C:\Project"
Dim dest As String = Path.Combine("D:\Archive", "Stub" & Now.ToString("yyyyMMddHHmmss") & ".zip")
If IsProjectOpen() Then 'You don't want Visual Studio holding a lock on anything while you're deleting folders
MsgBox("Close projects first, (expletive deleted)", vbOKOnly)
Exit Sub
End If
If MsgBox("Are you sure you want to delete bin and obj folders?", vbOKCancel) = DialogResult.Cancel Then Exit Sub
If ClearBinAndObj(src) Then ZipFile.CreateFromDirectory(src, dest)
End Sub
Public Function ClearBinAndObj(targetDir As String) As Boolean
Dim dirstodelete As New List(Of String)
For Each d As String In My.Computer.FileSystem.GetDirectories(targetDir, FileIO.SearchOption.SearchAllSubDirectories, "bin")
dirstodelete.Add(d)
Next
For Each d As String In My.Computer.FileSystem.GetDirectories(targetDir, FileIO.SearchOption.SearchAllSubDirectories, "obj")
dirstodelete.Add(d)
Next
For Each d In dirstodelete
Try
Directory.Delete(d, True)
Catch ex As Exception
If MsgBox("Error: " & ex.Message & " - OK to continue?", vbOKCancel) = MsgBoxResult.Cancel Then Return False
End Try
Next
Return True
End Function
Public Function IsProjectOpen()
For Each clsProcess As Process In Process.GetProcesses()
If clsProcess.ProcessName.Equals("devenv") Then Return True
Next
Return False
End Function
Uma coisa a lembrar é que as exclusões do sistema de arquivos podem dar errado facilmente. Um dos meus favoritos foi quando percebi que não poderia excluir uma pasta porque ela continha itens criados pelo Visual Studio durante a execução com privilégios elevados (para que eu pudesse depurar um serviço).
Eu precisava dar permissão manualmente ou, suponho, executar o aplicativo com privilégios elevados também. De qualquer forma, acho que há algum valor em usar uma abordagem baseada em GUI interativa em vez de um script, especialmente porque isso é provavelmente algo que é feito no final de um longo dia e você não quer descobrir mais tarde que seu backup realmente não existe ...