Tengo un .zip
archivo y necesito descomprimir todo su contenido usando Powershell. Estoy haciendo esto pero no parece funcionar:
$shell = New-Object -ComObject shell.application
$zip = $shell.NameSpace("C:\a.zip")
MkDir("C:\a")
foreach ($item in $zip.items()) {
$shell.Namespace("C:\a").CopyHere($item)
}
Que pasa El directorio C:\a
aún está vacío.
powershell
Uli Kunkel
fuente
fuente
Respuestas:
Aquí hay una manera simple de usar ExtractToDirectory de System.IO.Compression.ZipFile :
Tenga en cuenta que si la carpeta de destino no existe, ExtractToDirectory la creará. Otras advertencias:
Ver también:
fuente
Exception calling "ExtractToDirectory" with "2" argument(s): "End of Central Directory record could not be found." At line:5 char:5 + [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $ou ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : InvalidDataException
Add-Type : Cannot add type. The assembly 'System.IO.Compression.FileSystem' could not be found.
. Tengo instalado .NET 4.6.2 y he verificado que el ensamblado está en el GAC, pero no descubrí por qué recibo este error.En PowerShell v5 +, hay un comando Expandir-Archivo (así como también Compress-Archive) integrado:
fuente
$PSVersionTable.PSVersion
para determinar qué versión de PowerShell está ejecutando.OutputPath
ha sido cambiado aDestinationPath
(referencia msdn.microsoft.com/powershell/reference/5.1/… )Expand-Archive -Path .\a.zip -DestinationPath .
En PowerShell v5.1 esto es ligeramente diferente en comparación con v5. De acuerdo con la documentación de MS, debe tener un
-Path
parámetro para especificar la ruta del archivo comprimido.O bien, esto puede ser un camino real:
Expandir-Archivar documento
fuente
Expand-Archive Draft.Zip -DestinationPath C:\Reference
funciona sin problemas. Además, no es la ruta real , sino la ruta absoluta .Use
Expand-Archive
cmdlet con uno de conjunto de parámetros:fuente
Hola, está funcionando para mí ...
fuente
CopyHere
método. Supongo que @OlegKazakov ya resolvió su problema. Sin embargo, pongo este enlace aquí para otros surfistas que pueden encontrar este tema: docs.microsoft.com/en-us/previous-versions/windows/desktop/…Para aquellos que desean usar Shell.Application.Namespace.Folder.CopyHere () y quieren ocultar las barras de progreso mientras copian, o usar más opciones, la documentación está aquí:
https://docs.microsoft.com/en-us / windows / desktop / shell / folder-copyhere
Para usar powershell y ocultar barras de progreso e inhabilitar confirmaciones, puede usar un código como este:
Limitaciones de uso de Shell. Aplicación en versiones principales de Windows:
https://docs.microsoft.com/en-us/windows-server/administration/server-core/what-is-server-core
En las versiones principales de Windows , de forma predeterminada, Microsoft-Windows-Server-Shell-Package no está instalado, por lo que shell.applicaton no funcionará.
nota : la extracción de archivos de esta manera llevará mucho tiempo y puede ralentizar la interfaz gráfica de usuario de Windows
fuente
Utilizando
expand-archive
directorios de creación automática pero con el nombre del archivo:fuente
outputPath
como en la respuesta aceptada. En esta solución (como dijo jpmc26), siempre creará un nuevo directorio en el directorio actual, por lo que es posible que necesite configurar el directorio actual antes de llamarunzip
Utilizando:
fuente
$archive
y$archiveFile
al finalForEach
Loop procesa cada archivo ZIP ubicado dentro de la$filepath
variablefuente