script cmd do powershell de out-zip.ps1

3

Eu encontrei este script powershell online e gostaria de executar isso a partir de um batchfile. Alguém pode me dar a sintaxe correta para este script. E, se possível, permitir a entrada de vários diretórios, o script será zipado.

########################################################
# out-zip.ps1
#
# Usage:
#    To zip up some files:
#       ls c:\source\*.txt | out-zip c:\target\archive.zip $_
#
#    To zip up a folder:
#       gi c:\source | out-zip c:\target\archive.zip $_
########################################################

$path = $args[0]
$files = $input

if (-not $path.EndsWith('.zip')) {$path += '.zip'} 

if (-not (test-path $path)) { 
  set-content $path ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
} 

$ZipFile = (new-object -com shell.application).NameSpace($path) 
$files | foreach {$zipfile.CopyHere($_.fullname)}

Então, o que eu realmente preciso é do arquivo cmd que diz isso (de preferência com pastas extras)

gi c:\source | out-zip c:\target\archive.zip $_

Obrigado, Kim!

    
por Kim 11.08.2012 / 11:26

2 respostas

2

Eu tive o mesmo problema com apenas um arquivo zip de 1kb sendo criado. Descobri que incluí um -noexit no comando: powershell.exe -noexit -Command "gi c: \ source | C: \ users \ Kim \ Dpcuments \ WindowsPowerShell \ out-zip.ps1 c: \ destino \ archive.zip"

Concedido, isso parece causar alguns outros problemas ao tentar usar isso em um arquivo em lote porque deixa o powershell aberto. Existem algumas outras soluções que estou investigando e que apenas aguardarão um determinado período de tempo para o "zip" ser concluído ou que realmente compara os arquivos de origem com o arquivo zip concluído antes de sair.

    
por 12.03.2013 / 15:42
1

Eu limpei o arquivo de script do PowerShell para você:

<#
.SYNOPSIS
Zip up files and folders
.EXAMPLE
To zip up some files:
    ls c:\source\*.txt | out-zip.ps1 c:\target\archive.zip
.EXAMPLE
To zip up a folder:
    gi c:\source | out-zip c:\target\archive.zip
#>

param(
    [parameter(Mandatory=$TRUE,ValueFromPipeline=$TRUE)] $files,
    [parameter(Mandatory=$TRUE,position=0)] [string] $path
)

if (-not $path.EndsWith('.zip')) {$path += '.zip'} 

if (-not (test-path $path)) { 
  set-content $path ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
} 

$zipFile = (new-object -com shell.application).NameSpace([System.IO.Path]::GetFullPath($path)) 
$files | %{$zipfile.CopyHere($_.fullname)}

Assumindo que out-zip.ps1 é salvo em C:\users\Kim\Dpcuments\WindowsPowerShell\out-zip.ps1 , abaixo está o arquivo em lote que você precisa.

@echo off
powershell.exe -Command "gi c:\source | C:\users\Kim\Dpcuments\WindowsPowerShell\out-zip.ps1 c:\target\archive.zip"
    
por 11.08.2012 / 14:17