none
Comprimir archivos individualmente, de manera automática y enviarlos a una carpeta destino RRS feed

  • Pregunta

  • Buenas tardes a todos

    Alguien que pudiera apoyarme?

    Tengo 4 carpetas con archivos de texto (.txt) dentro de ellas, cada carpeta tiene aproximadamente un total 50 de estos archivos.

    La tarea que realizo de manera manual es, comprimir cada uno de estos archivos (de manera individual):

    archivo1.zip

    archivo2.zip

    archivo50.zip

    y moverlos a una carpeta destino (como respaldo). La manera en la que lo hago es dando click drecho sobre cada uno de estos archivos .txt y enseguida selecciono "Enviar a carpeta comprimida (en zip)", despues de eso tengo que borrar los archivos .txt originiales.

    Todo esto lo realizo cada 4 días por lo cual se me hace un poco tedioso ya que tengo que hacerlo en varios equipos Windows Server 2003. Quisiera saber si existe la posibilidad de hacer todo esto mediante powershell o algún otro metodo de manera automática.

    En verdad me sería de gran utilidad ya que ahorraria mucho tiempo.

    Gracias de antemano!


    • Editado unorojo martes, 9 de octubre de 2012 18:29
    martes, 9 de octubre de 2012 16:05

Respuestas

  • Buenas,

    Aquí te dejo un enlace con una posible solución. http://blogs.msdn.com/b/daiken/archive/2007/02/12/compress-files-with-windows-powershell-then-package-a-windows-vista-sidebar-gadget.aspx

    Si esta solución no te sirve, la otra alternativa es descargarte una aplicación de terceros (winRar, 7zip...) y utilizar su línea de comandos con powershell. Un ejemplo muy sencillo de uso de winrar podría ser este. El código no está muy probado, pero te servirá como referencia de lo que hay que hacer.

    $foldersPath="C:\folder1",
    "C:\folder2",
    "C:folder3",
    "C:folder4"
    
    $foldersPath | ForEach-Object{
    
        $folder=$_
        Get-ChildItem -Path $folder | ForEach-Object{
            $file=$_
            $it=Get-Item -Path $folder"\"$file
            $name=$it.BaseName
            & 'C:\Program Files\WinRAR\WinRAR.exe' a "$name.zip" $it.FullName
        
        }
    
    }


    Entre todos aprendemos mas :) Blog personal: http://blogs.solidq.com/EnriquePuigNouselles/Home.aspx El rincon del DBA: http://blogs.solidq.com/ElRinconDelDBA/Home.aspx La Biblioteca de PowerPivot http://blogs.solidq.com/powerpivot/Home.aspx

    • Marcado como respuesta Fernando ReyesModerator miércoles, 21 de noviembre de 2012 7:54
    • Desmarcado como respuesta unorojo sábado, 23 de febrero de 2013 17:36
    • Marcado como respuesta unorojo sábado, 23 de febrero de 2013 17:36
    miércoles, 10 de octubre de 2012 12:37

Todas las respuestas

  • Buenas,

    Aquí te dejo un enlace con una posible solución. http://blogs.msdn.com/b/daiken/archive/2007/02/12/compress-files-with-windows-powershell-then-package-a-windows-vista-sidebar-gadget.aspx

    Si esta solución no te sirve, la otra alternativa es descargarte una aplicación de terceros (winRar, 7zip...) y utilizar su línea de comandos con powershell. Un ejemplo muy sencillo de uso de winrar podría ser este. El código no está muy probado, pero te servirá como referencia de lo que hay que hacer.

    $foldersPath="C:\folder1",
    "C:\folder2",
    "C:folder3",
    "C:folder4"
    
    $foldersPath | ForEach-Object{
    
        $folder=$_
        Get-ChildItem -Path $folder | ForEach-Object{
            $file=$_
            $it=Get-Item -Path $folder"\"$file
            $name=$it.BaseName
            & 'C:\Program Files\WinRAR\WinRAR.exe' a "$name.zip" $it.FullName
        
        }
    
    }


    Entre todos aprendemos mas :) Blog personal: http://blogs.solidq.com/EnriquePuigNouselles/Home.aspx El rincon del DBA: http://blogs.solidq.com/ElRinconDelDBA/Home.aspx La Biblioteca de PowerPivot http://blogs.solidq.com/powerpivot/Home.aspx

    • Marcado como respuesta Fernando ReyesModerator miércoles, 21 de noviembre de 2012 7:54
    • Desmarcado como respuesta unorojo sábado, 23 de febrero de 2013 17:36
    • Marcado como respuesta unorojo sábado, 23 de febrero de 2013 17:36
    miércoles, 10 de octubre de 2012 12:37
  • Aqui te dejo un script que utilizo yo para comprimir ficheros y borrar los anteriores a x dias.

    function Add-Zip
    {
        param([string]$zipfilename)

        if(-not (test-path($zipfilename)))
        {
            set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
            (dir $zipfilename).IsReadOnly = $false    
        }
        
        $shellApplication = new-object -com shell.application
        $zipPackage = $shellApplication.NameSpace($zipfilename)
        
        foreach($file in $input)
        {
                $zipPackage.MoveHere($file.FullName)
                Start-sleep -milliseconds 500
        }
    }

    #dir C:\tmp\Demo\*.* -Recurse | add-Zip C:\tmp\Demo\myzip.zip

    ##################Comprimir Logs Anteriores a 2 dias############

    $limit = (Get-Date).AddDays(-2)
    $path = "C:\Program Files\Programa"

    $Logs=@(Get-ChildItem -Path $path -Include *.log,*.log.* -Exclude *.zip -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } )
    Foreach ($log in $Logs) {Gci $log | Add-Zip($log.Fullname+".zip")}

    ##################DeleteLog.zip anteriores a 20dias##############

    $limit = (Get-Date).AddDays(-20)
    $path = "C:\Program Files\Programa"

    Get-ChildItem -Path $path -Include *.log.zip,*.log.*.zip -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force

    ##################Borrado de logs de usuarios anteriores a 2 dias##############

    $Path="C:\Users\*\AppData\Roaming\Programa"
    $Dias="2"
    Get-ChildItem $Path\PV*log* | Where {!$_.psIsContainer -and $_.LastWriteTime -lt (get-date).AddDays(-$Dias)} | Remove-Item -recurse -Force


    Sistemas

    jueves, 5 de marzo de 2015 17:50