Tentando descompactar um arquivo com o Powershell

3

Estou tentando descompactar vários arquivos, incluindo os novos arquivos xlsx, em uma pasta TMP, e depois trabalhar nessa pasta e depois removê-la. E merda não quer ir do meu jeito.

$spath = "C:\_PS\TestFolder"
$destination=”C:\TestFolder\Testzip"

Get-ChildItem $spath -include *.xlsx -Recurse  | foreach-object  {
    # Remove existing TMP folder and create a new one
    Remove-Item -Recurse -Force $destination
    New-Item $destination -type directory

    $archiveFile = $_.fullname | out-string -stream

    "Extract this: " + $archiveFile
    "To here: " + $destination

    $shellApplication = new-object -com shell.application
    $zipPackage = $shellApplication.NameSpace($archiveFile)
    $destinationFolder = $shellApplication.NameSpace($destination)
    $destinationFolder.CopyHere($zipPackage.Items())

}

E isso sempre me dá esses erros

Exception calling "NameSpace" with "1" argument(s): "Unspecified error (Exception from HRESULT: 0x80004005 (E_FAIL))" At C:\_PS\FindCC.ps1:62 char:46
+     $zipPackage = $shellApplication.NameSpace <<<< ($archiveFile)
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ComMethodTargetInvocation   You cannot call a method on a null-valued expression. At C:\_PS\FindCC.ps1:64 char:50
+     $destinationFolder.CopyHere($zipPackage.Items <<<< ())
    + CategoryInfo          : InvalidOperation: (Items:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
    
por Elvar 19.09.2011 / 16:12

2 respostas

2

Seu script funciona bem para arquivos ZIP:

Get-ChildItem $spath -include *.zip -Recurse

Não sei por que você está usando:

 -include *.xlsx

como isto é excluindo seus arquivos. Se você quiser mover arquivos XLSX, então você precisará escrever outro bloco de código para lidar com a movimentação do arquivo.

    
por 21.09.2011 / 09:29
1
function Extract-Zip 
{ 
    param([string]$zipfilename, [string] $destination) 
    if(test-path($zipfilename)) 
    { 
        $shellApplication = new-object -com shell.application 
        $zipPackage = $shellApplication.NameSpace($zipfilename) 
        $destinationFolder = $shellApplication.NameSpace($destination) 
        $destinationFolder.CopyHere($zipPackage.Items()) 
    }
    else 
    {   
        Write-Host $zipfilename "not found"
    }
} 

Uso da função:
Suponha que você queira extrair um arquivo zip com o nome "myzip.zip" em um diretório "C: \ myFolder".
Certifique-se de que o diretório "C: \ myFolder" exista e, em seguida, execute Extract-Zip C:\myzip.zip C:\myFolder

    
por 19.07.2012 / 08:32