elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  script batch git en .bat
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: script batch git en .bat  (Leído 2,670 veces)
davidperz

Desconectado Desconectado

Mensajes: 3


Ver Perfil
script batch git en .bat
« en: 24 Junio 2018, 17:50 pm »

Buenas tengo un problema, tengo varios scripts. Quiero hacer un backup de mi repositorio de git, comprimir y decir si es correcto e incorrecto y enviar los repositorios que se han clonado por correo. Tengo estos scripts:

@echo off
::Creacion de las variables
setlocal EnableDelayedExpansion
set Fecha=%Date:~6,4%%Date:~3,2%%Date:~0,2%
set Fecha_con_barras=%Date:~6,4%/%Date:~3,2%/%Date:~0,2%
set Hora=%time:~0,2%:%time:~3,2%:%time:~6,2%

::Entra al directorio C:\backup\git
mkdir %Fecha%
cd %Fecha%

::Clonar repositorios en la carpeta
set elem[0]=repositorio
set elem[1]=repositorio2

setlocal EnableDelayedExpansion
for /l %%a in (0,1,1) do (
git clone !elem[%%a]!

if %ERRORLEVEL% == 0 (
echo %Fecha_con_barras% %Hora% Repositorio !elem[%%a]! clonado correctamente >> C:\Users\proyecto\Desktop\scripts\errores%Fecha%.log
echo !elem[%%a]! clonado correctamente >> C:\Users\proyecto\Desktop\scripts\correo.txt
) else (
echo %Fecha_con_barras% %Hora% Repositorio !elem[%%a]! no ha sido clonado. >> C:\Users\proyecto\Desktop\scripts\errores%Fecha%.log
echo !elem[%%a]! no ha sido clonado. >> C:\Users\proyecto\Desktop\scripts\correo.txt
)
)

::Borrar archivos de mas de 7 dias
FORFILES /P "C:\backup\git" /D -7 /c "CMD /c DEL /Q @PATH"

Este es el script que lo comprime:

$fecha=get-date -uformat "%Y%m%d"
$source = "origen"
$destination = "destino.zip"
If(Test-path $destination) {Remove-item $destination}
Add-Type -assembly "system.io.compression.filesystem"
[io.compression.zipfile]::CreateFromDirectory($Source, $destination)

Necesitaria ayuda por favor espero respuestas


« Última modificación: 24 Junio 2018, 17:59 pm por davidperz » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: script batch git en .bat
« Respuesta #1 en: 24 Junio 2018, 22:01 pm »

Buenas tengo un problema, tengo varios scripts. Quiero hacer un backup de mi repositorio de git, comprimir y decir si es correcto e incorrecto y enviar los repositorios que se han clonado por correo. Tengo estos scripts:

Necesitaria ayuda por favor espero respuestas

¿Cual es la duda/problema?.

En el script de Powershell tienes una variable "$fecha" que no utilizas, ¿cual es el propósito?. ¿y por qué motivo tienes un script en Batch y otro en Powershell, pudiendo hacerlo todo de forma eficiente en un único script de Powershell?, además ten en cuenta que no puedes enviar correos con puro batch...

Aparte de eso, probablemente al crear el archivo comprimido quieras excluir archivos temporales del proyecto/repositorio para reducir el tamaño, así que en mi opinión te conviene más utilizar cualquier herramienta command-line como por ejemplo 7-Zip.

Bueno, aquí te dejo un código que he rescatado de uno de mis repos, estaba escrito en VB.NET y lo he adaptado para poder usarlo con Powershell (de la manera más rápida/sencilla, es más bien un copy&paste que una adaptación o conversión), el script sirve para crear un backup con un formato de fecha específico en el nombre y usando 7z.exe como compresor...

script.ps1
Código
  1. $vbCode = @'
  2. Imports Microsoft.VisualBasic  
  3. Imports System
  4. Imports System.Diagnostics
  5. Imports System.Globalization
  6. Imports System.IO
  7. Imports System.Linq
  8. Imports System.Threading
  9.  
  10. Public Module Module1
  11.  
  12.    Public Sub Main()
  13.  
  14.        Dim srcBackupDir As New DirectoryInfo(".\Solution") ' Source directory to backup.
  15.        Dim dstBackupDir As New DirectoryInfo(".\Backups")  ' Destination directory where to save the backup.
  16.  
  17.        Dim ci As New CultureInfo("es-ES", useUserOverride:=False)
  18.  
  19.        Dim backupDate As Date = Date.Now
  20.        Dim dateFormat As String = backupDate.ToString("MMMM-dd-yyyy", ci.DateTimeFormat) ' month-day-year
  21.        Dim timeFormat As String = backupDate.TimeOfDay.ToString("hh\.mm\.ss") ' hour.min.sec
  22.  
  23.        Dim repoName As String = "ElektroKit"
  24.        Dim nameFormat As String = String.Format("{0} Backup - {1} {2}.7z", repoName, ci.TextInfo.ToTitleCase(dateFormat), timeFormat) ' repoName Backup - month-day-year hour.min.sec
  25.        Dim fullFilePath As String = Path.Combine(dstBackupDir.FullName, nameFormat)
  26.  
  27.        Dim exclusionPatterns As String() = {".vs", "Bin", "Obj", "TestResults", "*.sln.GhostDoc.xml"}
  28.        Dim compressorFile As New FileInfo(".\7z.exe")
  29.        Dim compressorArgs As String = String.Format("a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=On ""{0}"" ""{1}"" {2}",
  30.                                           fullFilePath, srcBackupDir.FullName,
  31.                                           String.Join(" ", From exclusion As String In exclusionPatterns
  32.                                                            Select String.Format("-xr!""{0}""", exclusion)))
  33.  
  34.        If Not (srcBackupDir.Exists) Then
  35.            Throw New DirectoryNotFoundException(String.Format("Directory not found: '{0}'", srcBackupDir.FullName))
  36.        End If
  37.  
  38.        If Not (compressorFile.Exists) Then
  39.            Throw New FileNotFoundException(String.Format("File not found: '{0}'", compressorFile.FullName), compressorFile.FullName)
  40.        End If
  41.  
  42.        If Not (dstBackupDir.Exists) Then
  43.            dstBackupDir.Create()
  44.            dstBackupDir.Refresh()
  45.        End If
  46.  
  47.        Console.WriteLine("Source directory: {0}", srcBackupDir.FullName)
  48.        Console.WriteLine("Backup directory: {0}", dstBackupDir.FullName)
  49.        Console.WriteLine("Backup filename : {0}", nameFormat)
  50.  
  51.        Console.WriteLine()
  52.        Console.WriteLine("Compressor Path : {0}", compressorFile.FullName)
  53.        Console.WriteLine("Compressor Args.: {0}", compressorArgs)
  54.  
  55.        Console.WriteLine()
  56.        Console.WriteLine("Compressing source directory...")
  57.  
  58.        Using p As New Process()
  59.            With p.StartInfo
  60.                .FileName = compressorFile.FullName
  61.                .Arguments = compressorArgs
  62.                .WorkingDirectory = compressorFile.DirectoryName
  63.                .CreateNoWindow = True
  64.                .UseShellExecute = True
  65.                .WindowStyle = ProcessWindowStyle.Normal
  66.            End With
  67.  
  68.            p.Start()
  69.            p.WaitForExit(Timeout.Infinite)
  70.        End Using
  71.  
  72.        Console.WriteLine("Done!")
  73.    End Sub
  74.  
  75. End Module
  76. '@
  77.  
  78. $vbType = Add-Type -TypeDefinition $vbCode `
  79.                   -CodeDomProvider (New-Object Microsoft.VisualBasic.VBCodeProvider) `
  80.                   -PassThru `
  81.                   -ReferencedAssemblies "Microsoft.VisualBasic.dll", `
  82.                                         "System.dll", "System.IO.dll", "System.Linq.dll" `
  83.                                         | where { $_.IsPublic }
  84.  
  85. [Module1]::Main()
  86.  
  87. $Console = [System.Console]
  88. $Console::WriteLine("Press any key to exit...")
  89. $Console::ReadKey($false)
  90. Exit(0)

Teniendo ubicados en un mismo directorio el archivo script.ps1, el executable 7z.exe, un directorio de origen con nombre "Solution" y un directorio de salida con nombre "Backups", es decir:

Código:
Directorio raíz\Backups
Directorio raíz\Solution
Directorio raíz\script.ps1
Directorio raíz\7z.exe

...la salida de ejecución sería algo similar a esto:

Citar
Código:
Source directory: .\ElektroKit\v2.6\Solution
Backup directory: .\ElektroKit\v2.6\Backups
Backup filename : ElektroKit Backup - Junio-24-2018 21.37.14.7z

Compressor Path : .\ElektroKit\v2.6\7z.exe
Compressor Args.: a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=On ".\ElektroKit\v2.6\Backups\ElektroKit Backup - Junio-24-2018 21.37.14.7z" ".\ElektroKit\v2.6\Solution" -xr!".vs" -xr!"Bin" -xr!"Obj" -xr!"TestResults" -xr!"*.sln.GhostDoc.xml"

Compressing source directory...

Done!

Press any key to terminate...

Obviamente antes de poder usar ese script, necesitarás hacer unos pequeños cambios en el código fuente para asignar los nombres de tus rutas y archivos, patorones de exclusiones, y si quieres cambiar el formato de fecha también, etc, no lo voy a hacer todo yo. También puedes usar parámetros nombrados en powershell si lo prefieres, en vez de usar valores hard-codeados en ese código fuente de VB.NET.

Con respecto a lo de enviar por email, si sigues el ejempo de usar VB.NET entonces es tan simple como utilizar la clase System.Net.Mail.SmtpClient y configurar el servidor SMTP desde el que piensas enviar el correo, tienes miles de ejemplos en Internet para C# y VB.NET. También es algo que puedes hacer en puro código Powershell: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage

Saludos.


« Última modificación: 24 Junio 2018, 22:15 pm por Eleкtro » En línea

davidperz

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: script batch git en .bat
« Respuesta #2 en: 24 Junio 2018, 22:19 pm »

Tengo varios repositorios y queria tambien tener un log que habria que modificar?? Muchas gracias
En línea

davidperz

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: script batch git en .bat
« Respuesta #3 en: 24 Junio 2018, 22:25 pm »

¿Cual es la duda/problema?.

En el script de Powershell tienes una variable "$fecha" que no utilizas, ¿cual es el propósito?. ¿y por qué motivo tienes un script en Batch y otro en Powershell, pudiendo hacerlo todo de forma eficiente en un único script de Powershell?, además ten en cuenta que no puedes enviar correos con puro batch...

Aparte de eso, probablemente al crear el archivo comprimido quieras excluir archivos temporales del proyecto/repositorio para reducir el tamaño, así que en mi opinión te conviene más utilizar cualquier herramienta command-line como por ejemplo 7-Zip.

Bueno, aquí te dejo un código que he rescatado de uno de mis repos, estaba escrito en VB.NET y lo he adaptado para poder usarlo con Powershell (de la manera más rápida/sencilla, es más bien un copy&paste que una adaptación o conversión), el script sirve para crear un backup con un formato de fecha específico en el nombre y usando 7z.exe como compresor...

script.ps1
Código
  1. $vbCode = @'
  2. Imports Microsoft.VisualBasic  
  3. Imports System
  4. Imports System.Diagnostics
  5. Imports System.Globalization
  6. Imports System.IO
  7. Imports System.Linq
  8. Imports System.Threading
  9.  
  10. Public Module Module1
  11.  
  12.    Public Sub Main()
  13.  
  14.        Dim srcBackupDir As New DirectoryInfo(".\Solution") ' Source directory to backup.
  15.        Dim dstBackupDir As New DirectoryInfo(".\Backups")  ' Destination directory where to save the backup.
  16.  
  17.        Dim ci As New CultureInfo("es-ES", useUserOverride:=False)
  18.  
  19.        Dim backupDate As Date = Date.Now
  20.        Dim dateFormat As String = backupDate.ToString("MMMM-dd-yyyy", ci.DateTimeFormat) ' month-day-year
  21.        Dim timeFormat As String = backupDate.TimeOfDay.ToString("hh\.mm\.ss") ' hour.min.sec
  22.  
  23.        Dim repoName As String = "ElektroKit"
  24.        Dim nameFormat As String = String.Format("{0} Backup - {1} {2}.7z", repoName, ci.TextInfo.ToTitleCase(dateFormat), timeFormat) ' repoName Backup - month-day-year hour.min.sec
  25.        Dim fullFilePath As String = Path.Combine(dstBackupDir.FullName, nameFormat)
  26.  
  27.        Dim exclusionPatterns As String() = {".vs", "Bin", "Obj", "TestResults", "*.sln.GhostDoc.xml"}
  28.        Dim compressorFile As New FileInfo(".\7z.exe")
  29.        Dim compressorArgs As String = String.Format("a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=On ""{0}"" ""{1}"" {2}",
  30.                                           fullFilePath, srcBackupDir.FullName,
  31.                                           String.Join(" ", From exclusion As String In exclusionPatterns
  32.                                                            Select String.Format("-xr!""{0}""", exclusion)))
  33.  
  34.        If Not (srcBackupDir.Exists) Then
  35.            Throw New DirectoryNotFoundException(String.Format("Directory not found: '{0}'", srcBackupDir.FullName))
  36.        End If
  37.  
  38.        If Not (compressorFile.Exists) Then
  39.            Throw New FileNotFoundException(String.Format("File not found: '{0}'", compressorFile.FullName), compressorFile.FullName)
  40.        End If
  41.  
  42.        If Not (dstBackupDir.Exists) Then
  43.            dstBackupDir.Create()
  44.            dstBackupDir.Refresh()
  45.        End If
  46.  
  47.        Console.WriteLine("Source directory: {0}", srcBackupDir.FullName)
  48.        Console.WriteLine("Backup directory: {0}", dstBackupDir.FullName)
  49.        Console.WriteLine("Backup filename : {0}", nameFormat)
  50.  
  51.        Console.WriteLine()
  52.        Console.WriteLine("Compressor Path : {0}", compressorFile.FullName)
  53.        Console.WriteLine("Compressor Args.: {0}", compressorArgs)
  54.  
  55.        Console.WriteLine()
  56.        Console.WriteLine("Compressing source directory...")
  57.  
  58.        Using p As New Process()
  59.            With p.StartInfo
  60.                .FileName = compressorFile.FullName
  61.                .Arguments = compressorArgs
  62.                .WorkingDirectory = compressorFile.DirectoryName
  63.                .CreateNoWindow = True
  64.                .UseShellExecute = True
  65.                .WindowStyle = ProcessWindowStyle.Normal
  66.            End With
  67.  
  68.            p.Start()
  69.            p.WaitForExit(Timeout.Infinite)
  70.        End Using
  71.  
  72.        Console.WriteLine("Done!")
  73.    End Sub
  74.  
  75. End Module
  76. '@
  77.  
  78. $vbType = Add-Type -TypeDefinition $vbCode `
  79.                   -CodeDomProvider (New-Object Microsoft.VisualBasic.VBCodeProvider) `
  80.                   -PassThru `
  81.                   -ReferencedAssemblies "Microsoft.VisualBasic.dll", `
  82.                                         "System.dll", "System.IO.dll", "System.Linq.dll" `
  83.                                         | where { $_.IsPublic }
  84.  
  85. [Module1]::Main()
  86.  
  87. $Console = [System.Console]
  88. $Console::WriteLine("Press any key to exit...")
  89. $Console::ReadKey($false)
  90. Exit(0)

Teniendo ubicados en un mismo directorio el archivo script.ps1, el executable 7z.exe, un directorio de origen con nombre "Solution" y un directorio de salida con nombre "Backups", es decir:

Código:
Directorio raíz\Backups
Directorio raíz\Solution
Directorio raíz\script.ps1
Directorio raíz\7z.exe

...la salida de ejecución sería algo similar a esto:

Obviamente antes de poder usar ese script, necesitarás hacer unos pequeños cambios en el código fuente para asignar los nombres de tus rutas y archivos, patorones de exclusiones, y si quieres cambiar el formato de fecha también, etc, no lo voy a hacer todo yo. También puedes usar parámetros nombrados en powershell si lo prefieres, en vez de usar valores hard-codeados en ese código fuente de VB.NET.

Con respecto a lo de enviar por email, si sigues el ejempo de usar VB.NET entonces es tan simple como utilizar la clase System.Net.Mail.SmtpClient y configurar el servidor SMTP desde el que piensas enviar el correo, tienes miles de ejemplos en Internet para C# y VB.NET. También es algo que puedes hacer en puro código Powershell: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage

Saludos.

Primero tendria que clonar los repositorios que quisiera y ponerlos en solution y dentro de backup se haria la compresion y hay alguna forma de decir cual se a clonado correctamente y cual no se a clonado correctamente. Muchas gracias
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
programa batch o script
Scripting
meihan 0 1,938 Último mensaje 28 Junio 2008, 07:05 am
por meihan
Script BATCH BASICO
Scripting
Fx Hound 1 4,172 Último mensaje 15 Mayo 2010, 18:25 pm
por flony
Batch Script Compara IPs
Scripting
Fluflu 3 3,648 Último mensaje 4 Agosto 2010, 14:38 pm
por Eltester
[Batch] Se me cae el script « 1 2 3 »
Scripting
VivaElPirateo 24 11,807 Último mensaje 5 Junio 2012, 06:59 am
por VivaElPirateo
[BATCH] Necessito ayuda URGENTE ! SCRIPT BATCH !!
Scripting
wescker 0 2,205 Último mensaje 26 Noviembre 2016, 19:41 pm
por wescker
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines