windows - extraer - crear un script por lotes para descomprimir un archivo sin herramientas zip adicionales
como extraer archivos zip en windows 10 (5)
Aquí está mi visión general sobre las capacidades integradas de zi / descomprimir (comprimir / descomprimir) en Windows: ¿cómo puedo comprimir (/ comprimir) y descomprimir (/ descomprimir) archivos y carpetas con archivos por lotes sin usar herramientas externas?
Para descomprimir un archivo puede usar este script :
zipjs.bat unzip -source C:/myDir/myZip.zip -destination C:/MyDir -keep yes -force no
Estoy tratando de crear un script .bat para Windows 7 x64 para crear una carpeta, descomprimir un archivo en esa carpeta sin tener que usar complementos adicionales como 7zip o descomprimir. He estado buscando y parece que Windows no tiene builtins para permitir descomprimir fácilmente al comando. ¿Puedo descomprimir / expandir archivos sin complementos adicionales?
Aquí hay una solución rápida y simple usando PowerShell:
powershell.exe -nologo -noprofile -command "& { $shell = New-Object -COM Shell.Application; $target = $shell.NameSpace(''C:/extractToThisDirectory''); $zip = $shell.NameSpace(''C:/extractThis.zip''); $target.CopyHere($zip.Items(), 16); }"
Esto usa la funcionalidad de extracción incorporada del Explorador y también mostrará la ventana de progreso de extracción típica. El segundo parámetro 16
de CopyHere
responde todas las preguntas con yes.
Otro enfoque para este problema podría ser crear un ejecutable autoextraíble (.exe) usando algo como winzip y usarlo como el vector de instalación en lugar del archivo zip. Del mismo modo, podría usar NSIS para crear un instalador ejecutable y usarlo en lugar del zip.
Prueba esto:
@echo off
setlocal
cd /d %~dp0
Call :UnZipFile "C:/Temp/" "c:/path/to/batch.zip"
exit /b
:UnZipFile <ExtractTo> <newzipfile>
set vbs="%temp%/_.vbs"
if exist %vbs% del /f /q %vbs%
>%vbs% echo Set fso = CreateObject("Scripting.FileSystemObject")
>>%vbs% echo If NOT fso.FolderExists(%1) Then
>>%vbs% echo fso.CreateFolder(%1)
>>%vbs% echo End If
>>%vbs% echo set objShell = CreateObject("Shell.Application")
>>%vbs% echo set FilesInZip=objShell.NameSpace(%2).items
>>%vbs% echo objShell.NameSpace(%1).CopyHere(FilesInZip)
>>%vbs% echo Set fso = Nothing
>>%vbs% echo Set objShell = Nothing
cscript //nologo %vbs%
if exist %vbs% del /f /q %vbs%
Revisión
Para hacer que realice la descompresión en cada archivo zip creando una carpeta para cada uso:
@echo off
setlocal
cd /d %~dp0
for %%a in (*.zip) do (
Call :UnZipFile "C:/Temp/%%~na/" "c:/path/to/%%~nxa"
)
exit /b
Si no desea que cree una carpeta para cada archivo comprimido, cambie la Call :UnZipFile "C:/Temp/%%~na/" "c:/path/to/%%~nxa"
para Call :UnZipFile "C:/Temp/" "c:/path/to/%%~nxa"
Si tiene PowerShell 5.0 o superior (preinstalado con Windows 10 y Windows Server 2016):
powershell Expand-Archive your.zip -DestinationPath your_destination