windows - con - comprimir y descomprimir archivos definicion
¿Cómo puede comprimir o descomprimir el script usando SOLO las capacidades integradas de Windows? (14)
En Windows puedes zip
algunos archivos por
clic derecho -> enviar a -> carpeta comprimida (en zip)
Y unzip
haciendo doble clic en el archivo .zip
y extraiga los archivos.
¿Hay una manera de aplicar esas habilidades desde un script (archivo .bat) sin la necesidad de instalar un tercero ?
PowerShell 5.0
Desde Microsoft.PowerShell.Archive
puedes usar:
P.ej:
Cree
result.zip
desde toda la carpeta deTest
:Compress-Archive -Path C:/Test -DestinationPath C:/result
Extraiga el contenido de
result.zip
en la carpeta deTest
especificada:Expand-Archive -Path result.zip -DestinationPath C:/Test
El código abierto es tu amigo :-)
Aquí está el UNZIP: http://gnuwin32.sourceforge.net/packages/unzip.htm
También hay un comando ZIP: http://gnuwin32.sourceforge.net/packages/zip.htm
La descarga de binarios es suficiente.
En 2013, eso no fue posible. MS no proporcionó ningún ejecutable para esto.
Vea este enlace para alguna forma de VBS para hacer esto. https://superuser.com/questions/201371/create-zip-folder-from-the-command-line-windows
A partir de Windows 8, .Net Framework 4.5 se instala de manera predeterminada, con System.IO.Compression.ZipArchive y PowerShell disponibles, se pueden escribir scripts para lograr esto, consulte https://.com/a/26843122/71312
He estado buscando responder a esta pregunta exacta y de mi investigación, la respuesta de DiryBoy parece ser precisa.
Encontré que el programa compact.exe comprime archivos pero no crea un archivo altamente comprimido (o conjunto de archivos). Es similar a la opción que se obtiene al hacer clic con el botón derecho en una letra de unidad o partición en Windows. Tienes la opción de hacer limpieza (eliminar archivos temporales, etc.), así como también comprimir archivos. Los archivos comprimidos aún son accesibles, pero solo están comprimidos para crear espacio en una unidad con poco espacio.
También encontré compress.exe que tenía en mi computadora. No es nativo en la mayoría de las máquinas con Windows y es parte del kit de recursos de 2003. Hace una especie de archivo comprimido, pero en realidad es más similar a los archivos de un disco de instalación de Windows (tiene el subrayado como el último carácter de la extensión o nombre del archivo). Y el comando extract.exe extrae esos archivos.
Sin embargo, el mantra es, si se puede hacer de forma nativa a través de la GUI, entonces es probable que haya una forma de hacerlo por lotes, .vbs o algún otro tipo de script dentro de la línea de comandos. Como Windows ha tenido la opción ''enviar a'' para crear un archivo zip, sabía que tenía que haber una forma de hacerlo a través de la línea de comandos y encontré algunas opciones.
Aquí hay un gran enlace que muestra cómo comprimir un archivo mediante comandos nativos de Windows.
Lo probé con un directorio que contenía varios archivos y carpetas anidados y funcionó perfectamente. Simplemente siga el formato de la línea de comando.
También hay una manera de descomprimir los archivos a través de la línea de comandos que también encontré. De una forma, solo abre una ventana del explorador que muestra el contenido del archivo comprimido. Algunos de estos también utilizan Java, que no es necesariamente nativo de Windows, pero es tan común que casi lo parece.
No es exactamente un archivo zip, pero la única forma de comprimir un archivo con las herramientas de Windows es:
makecab <source> <dest>.cab
Para descomprimir:
expand <source>.cab <dest>
Ejemplo avanzado (de ss64.com):
Create a self extracting archive containing movie.mov:
C:/> makecab movie.mov "temp.cab"
C:/> copy /b "%windir%/system32/extrac32.exe"+"temp.cab" "movie.exe"
C:/> del /q /f "temp.cab"
Más información: makecab , expand , makecab usos avanzados
Para ampliar la solución PowerShell de Steven Penny, puede incorporarla a un archivo por lotes llamando a powershell.exe de esta manera:
powershell.exe -nologo -noprofile -command "& { Add-Type -A ''System.IO.Compression.FileSystem''; [IO.Compression.ZipFile]::ExtractToDirectory(''foo.zip'', ''bar''); }"
Como dijo Ivan Shilo, esto no funcionará con PowerShell 2, requiere PowerShell 3 o superior y .NET Framework 4.
Para comprimir un archivo:
C:/> zip -9 -m -o file.dat.zip file.dat
- -9 compresión máxima
- -m eliminar el archivo original después de la compresión exitosa
- -o establece la fecha de modificación del archivo zip igual que el archivo original
- demasiado malo uno tiene que darle el nombre del archivo zip deseado en lugar de él simplemente agregando la extensión .zip al nombre del archivo para comprimir
PowerShell puede hacer esto
Add-Type -A System.IO.Compression.FileSystem
[IO.Compression.ZipFile]::CreateFromDirectory(''foo'', ''foo.zip'')
[IO.Compression.ZipFile]::ExtractToDirectory(''foo.zip'', ''bar'')
Puede descomprimir un archivo comprimido comprimido comprimido nativo o comprimido usando el comando Expand , por ejemplo,
expand MyFile.zip myFile
Puede usar un vbsscript envuelto en un archivo BAT ... este es mi código que funciona en un PATH relativo ...
No es necesario contar con herramientas o dependencias de terceros. Solo configure el origen y el destino.
nombre de archivo: zipping.bat
echo Set fso = CreateObject("Scripting.FileSystemObject") > _zipup.vbs
echo InputFolder = fso.GetAbsolutePathName(WScript.Arguments.Item(0)) >> _zipup.vbs
echo ZipFile = fso.GetAbsolutePathName(WScript.Arguments.Item(1)) >> _zipup.vbs
''Create empty ZIP file.
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar) >> _zipup.vbs
echo Set objShell = CreateObject("Shell.Application") >> _zipup.vbs
echo Set source = objShell.NameSpace(InputFolder).Items >> _zipup.vbs
echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipup.vbs
echo ''Keep script waiting until compression is done
echo Do Until objShell.NameSpace( ZipFile ).Items.Count = objShell.NameSpace( InputFolder ).Items.Count >> _zipup.vbs
echo WScript.Sleep 200 >> _zipup.vbs
echo Loop >> _zipup.vbs
CScript _zipup.vbs %SOURCEDIR% %OUTPUTZIP%
del _zipup.vbs
Si necesita hacer esto como parte de un script, la mejor manera es usar Java. Suponiendo que el directorio bin esté en su ruta (en la mayoría de los casos), puede usar la línea de comando:
jar xf test.zip
Si Java no está directamente en su referencia de pase:
C:/Java/jdk1.6.0_03/bin>jar xf test.zip
Si tiene instalado Java , puede comprimirlo a un archivo ZIP usando el comando jar :
jar -cMf targetArchive.zip sourceDirectory
c = Crea un nuevo archivo de almacenamiento.
M = Especifica que no se debe agregar un archivo de manifiesto al archivo.
f = Indica el nombre del archivo de destino.
Usted dice que está tratando de hacer esto sin un software de terceros. No estoy seguro de si consideraría a .NET un software de "terceros".
Pero puedes crear tu propia utilidad de línea de comandos en .NET. No debería requerir más que unas pocas líneas de código.
https://msdn.microsoft.com/en-us/library/system.io.compression.zipfile(v=vs.110).aspx
Utilizando 7-Zip:
Zip : tienes una carpeta foo
, y quieres myzip.zip
en myzip.zip
"C:/Program Files/7-Zip/7z.exe" a -r myzip.zip -w foo -mem=AES256
Descomprimir : desea descomprimirlo ( myzip.zip
) al directorio actual ( ./
)
"C:/Program Files/7-Zip/7z.exe" x myzip.zip -o./ -y -r