¿Cómo descomprimir un archivo en Powershell?
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)
}
¿Qué ocurre? El directorio C:\a
todavía está vacío.
En PowerShell v5+, hay un comando Expandir-Archivar (así como Comprimir-Archivar) integrado:
Expand-Archive C:\a.zip -DestinationPath C:\a
A continuación se muestra una forma sencilla de utilizar ExtractToDirectory de System.IO.Compression.ZipFile :
Add-Type -AssemblyName System.IO.Compression.FileSystem
function Unzip
{
param([string]$zipfile, [string]$outpath)
[System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
}
Unzip "C:\a.zip" "C:\a"
Tenga en cuenta que si la carpeta de destino no existe, ExtractToDirectory la creará. Otras advertencias:
- Los archivos existentes no se sobrescribirán y, en su lugar, desencadenarán una IOException.
- Este método requiere al menos .NET Framework 4.5, disponible para Windows Vista y versiones posteriores.
- Las rutas relativas no se resuelven según el directorio de trabajo actual; consulte ¿ Por qué los objetos .NET en PowerShell no usan el directorio actual?
Ver también:
- Cómo comprimir y extraer archivos (Microsoft Docs)
En PowerShell v5.1 esto es ligeramente diferente en comparación con v5. Según la documentación de MS, debe tener un -Path
parámetro para especificar la ruta del archivo comprimido.
Expand-Archive -Path Draft.Zip -DestinationPath C:\Reference
O bien, esta puede ser una ruta real:
Expand-Archive -Path c:\Download\Draft.Zip -DestinationPath C:\Reference
Expandir-archivar documento
Utilice Expand-Archive
cmdlet con uno de los conjuntos de parámetros:
Expand-Archive -LiteralPath C:\source\file.Zip -DestinationPath C:\destination
Expand-Archive -Path file.Zip -DestinationPath C:\destination