No creo que haya una línea de comando para los archivos ZIP integrados en Windows (excepto compressen el Kit de recursos de Server 2003). Tendrías que usar un tercero. ¡Todo el mundo ama a 7zip !
He combinado este script de varias fuentes diferentes para satisfacer mejor mis necesidades. Copie y pegue el script en un archivo con la extensión ".vbs". El script se creó originalmente para Windows XP, pero también funciona en Windows 7 x64 Ultimate; no hay garantía de que Windows se mantenga cerca de los diversos objetos Shell que usa.
Uso: en el cuadro de ejecución o en la línea de comando
Ruta de la secuencia de comandos, carpeta de origen, archivo zip para crear (incluya .zip al final).
No copiará carpetas vacías, así que tenga cuidado.
Aquí está el código vbs ---
Set Args = Wscript.Arguments
source = Args(0)
target = Args(1)
' make sure source folder has \ at end
If Right(source, 1) <> "\" Then
source = source & "\"
End If
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set zip = objFSO.OpenTextFile(target, 2, vbtrue)
' this is the header to designate a file as a zip
zip.Write "PK" & Chr(5) & Chr(6) & String( 18, Chr(0) )
zip.Close
Set zip = nothing
wscript.sleep 500
Set objApp = CreateObject( "Shell.Application" )
intSkipped = 0
' Loop over items within folder and use CopyHere to put them into the zip folder
For Each objItem in objApp.NameSpace( source ).Items
If objItem.IsFolder Then
Set objFolder = objFSO.GetFolder( objItem.Path )
' if this folder is empty, then skip it as it can't compress empty folders
If objFolder.Files.Count + objFolder.SubFolders.Count = 0 Then
intSkipped = intSkipped + 1
Else
objApp.NameSpace( target ).CopyHere objItem
End If
Else
objApp.NameSpace( target ).CopyHere objItem
End If
Next
intSrcItems = objApp.NameSpace( source ).Items.Count
wscript.sleep 250
' delay until at least items at the top level are available
Do Until objApp.NameSpace( target ).Items.Count + intSkipped = intSrcItems
wscript.sleep 200
Loop
'cleanup
Set objItem = nothing
Set objFolder = nothing
Set objApp = nothing
Set objFSO = nothing
Parece prometedor, pero recibí un error "Objeto requerido: 'objApp.NameSpace (...)' en la línea 16
pihentagy
Tengo el mismo problema. El código anterior no funciona o necesita algunas cosas adicionales en el sistema que el póster olvidó mencionar.
Shaamaan 01 de
Utiliza WScript (entorno vbs) y varios objetos Shell. Todos se instalaron por defecto en Windows XP (¿negocios?) Y Win 7 Ultimate x64. ¿Quizás están más tiempo allí para Win8?
WSkid
2
Es posible ejecutar el script de PowerShell desde BAT. La ruta de recepción del archivo bat al directorio que se va a comprimir y el nombre del archivo zip como parámetros.
@echo off
setlocal
rem First parameter - path to dir to be zipped
rem Second parameter- zip file name
set sourceDir=%1
set zipFile=%2
rem Create PowerShell script
echo Write-Output 'Custom PowerShell profile in effect!' > %~dp0TempZipScript.ps1
echo Add-Type -A System.IO.Compression.FileSystem >> %~dp0TempZipScript.ps1
echo [IO.Compression.ZipFile]::CreateFromDirectory('%sourceDir%','%~dp0%zipFile%') >> %~dp0TempZipScript.ps1
rem Execute script with flag "-ExecutionPolicy Bypass" to get around ExecutionPolicy
PowerShell.exe -ExecutionPolicy Bypass -Command "& '%~dp0TempZipScript.ps1'"
del %~dp0TempZipScript.ps1
endlocal
Pero, ¿cuál sería la ventaja de este enfoque? ¿Por qué no simplemente escribir el script de PowerShell en un archivo fijo y dejar que acepte parámetros?
Seth
Intenté todas las otras soluciones. Esta es la única solución a prueba de fallas que funciona perfectamente. La ventaja más importante es el uso de los comandos nativos de powershell y no es necesario crear el VBScript de tecnología antigua.
desmati
Esto funcionó para mí en un viejo portátil corporativo
windows7
1
Aquí hay un excelente enlace que muestra cómo comprimir un archivo usando los comandos nativos de Windows.
Lo probé con un directorio que contenía múltiples 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 encontré también. Una forma, solo abre una ventana del explorador que muestra cuál es el contenido del archivo comprimido. Algunos de estos también usan Java, que no es necesariamente nativo de Windows, pero es tan común que casi lo parece.
Debe incluir las instrucciones en su respuesta. Si los enlaces se vuelven obsoletos, su respuesta será inútil ...
MoonSire
1
Esta es una vieja pregunta, pero su relevancia aún es actual.
Windows, por supuesto, tiene su propio algoritmo de compresión incorporado para usar archivos zip, pero realmente funciona mal en comparación con el producto de código abierto 7zip que se encuentra aquí http://www.7-zip.org/
Otros ya han discutido varios métodos para usar las funciones integradas de Windows, mi solución requiere instalar el software adicional.
7Zip admite una amplia gama de archivos, incluidos ZIP, RAR, CAB e ISO y su propio formato 7z.
Puede ver la ayuda de la línea de comandos: "C: \ Archivos de programa \ 7-Zip \ 7z.exe" --ayuda
para realizar una simple adición al archivo zip:
"C: \ Archivos de programa \ 7-Zip \ 7z.exe" a filename.zip c: \ path
Eso no fue lo que me propuse hacer, pero ahora funcionará para mí. Es un truco útil para saber.
bballdave025
0
Publicaré algo relacionado con la respuesta de WSkids ya que lamentablemente no puedo usar la función de comentario.
El uso del método CopyHere () en VBS presenta varios problemas. Uno de estos problemas es que el método regresa inmediatamente mientras el proceso de copia comienza en segundo plano, mientras que varias llamadas CopyHere () se interferirán entre sí y el ZIP no se creará correctamente. Aquí se necesita un bucle de espera para arreglar eso. Mi ciclo de espera se basa en una respuesta a un problema similar publicado aquí .
Aquí hay una versión actualizada que corrige el error "Objeto requerido" reportado por pihentagy . Es un problema de tiempo ya que el archivo ZIP recién creado se incluye en la colección Items cuando el script se ejecuta en máquinas rápidas.
set Args = WScript.Arguments
source = Args(0)
' remove trailing slashes as we add slashes when needed later
while Right(source, 1) = "\"
source = Mid(source, 1, Len(source) - 1)
wend
target = Args(1)
' create empty ZIP file
set fso = CreateObject("Scripting.FileSystemObject")
set zip = fso.OpenTextFile(target, 2, vbtrue)
' write ZIP header, this ensures that Windows recognizes the file as "ZIP Folder"
zip.Write "PK" & Chr(5) & Chr(6) & String(18, Chr(0))
zip.Close
set zip = nothing
set fso = nothing
' copy files to ZIP file
set app = CreateObject("Shell.Application")
set sourceFolderObj = app.NameSpace(source)
set targetFolderObj = app.NameSpace(target)
for each item in sourceFolderObj.Items
itemPath = source & "\" & item.Name
copyItem = false
' ZIP file is included in Items collection and is recognized as folder, thus skip it to avoid script errors
if itemPath <> target then
if item.IsFolder then
if item.GetFolder.Items().Count = 0 then
' folder is empty, skip it as empty folders can't be compressed
else
copyItem = true
end if
else
copyItem = true
end if
end if
if copyItem then
targetFolderObj.CopyHere item
' wait until the file appears in the ZIP file,
' this is needed because CopyHere() returns immediately after starting an asynchronous copy process
' (starting multiple asynchronous copy will not work as it causes error messages, an invalid ZIP file, ...)
while (targetFolderObj.ParseName(item.Name) is nothing)
WScript.Sleep 1
wend
end If
next
set targetFolderObj = nothing
set sourceFolderObj = nothing
set app = nothing
compress.exe
.Respuestas:
A partir de PowerShell 5 (febrero de 2016), puede usar "Compress-Archive":
O:
http://msdn.microsoft.com/powershell/reference/5.0/microsoft.powershell.archive/compress-archive
fuente
No creo que haya una línea de comando para los archivos ZIP integrados en Windows (excepto
compress
en el Kit de recursos de Server 2003). Tendrías que usar un tercero. ¡Todo el mundo ama a 7zip !fuente
He combinado este script de varias fuentes diferentes para satisfacer mejor mis necesidades. Copie y pegue el script en un archivo con la extensión ".vbs". El script se creó originalmente para Windows XP, pero también funciona en Windows 7 x64 Ultimate; no hay garantía de que Windows se mantenga cerca de los diversos objetos Shell que usa.
Uso: en el cuadro de ejecución o en la línea de comando
Ruta de la secuencia de comandos, carpeta de origen, archivo zip para crear (incluya .zip al final).
No copiará carpetas vacías, así que tenga cuidado.
Aquí está el código vbs ---
fuente
Es posible ejecutar el script de PowerShell desde BAT. La ruta de recepción del archivo bat al directorio que se va a comprimir y el nombre del archivo zip como parámetros.
fuente
Aquí hay un excelente enlace que muestra cómo comprimir un archivo usando los comandos nativos de Windows.
¿Puede comprimir un archivo desde el símbolo del sistema utilizando SOLO la capacidad integrada de Windows para comprimir archivos?
Lo probé con un directorio que contenía múltiples 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 encontré también. Una forma, solo abre una ventana del explorador que muestra cuál es el contenido del archivo comprimido. Algunos de estos también usan Java, que no es necesariamente nativo de Windows, pero es tan común que casi lo parece.
¿Windows 7 tiene descomprimir en la línea de comandos instalada por defecto?
https://stackoverflow.com/questions/1021557/how-to-unzip-a-file-using-the-command-line
fuente
Esta es una vieja pregunta, pero su relevancia aún es actual.
Windows, por supuesto, tiene su propio algoritmo de compresión incorporado para usar archivos zip, pero realmente funciona mal en comparación con el producto de código abierto 7zip que se encuentra aquí http://www.7-zip.org/
Otros ya han discutido varios métodos para usar las funciones integradas de Windows, mi solución requiere instalar el software adicional.
7Zip admite una amplia gama de archivos, incluidos ZIP, RAR, CAB e ISO y su propio formato 7z.
Puede ver la ayuda de la línea de comandos: "C: \ Archivos de programa \ 7-Zip \ 7z.exe" --ayuda
para realizar una simple adición al archivo zip:
"C: \ Archivos de programa \ 7-Zip \ 7z.exe" a filename.zip c: \ path
fuente
Aquí hay otra idea, de 4 fuentes diferentes; no mis ideas, pero las compilé para que funcionen para mí
fuente
Imagine que desea comprimir la misma carpeta que está en el símbolo del sistema SIN abrir una ventana de PowerShell:
fuente
Publicaré algo relacionado con la respuesta de WSkids ya que lamentablemente no puedo usar la función de comentario.
El uso del método CopyHere () en VBS presenta varios problemas. Uno de estos problemas es que el método regresa inmediatamente mientras el proceso de copia comienza en segundo plano, mientras que varias llamadas CopyHere () se interferirán entre sí y el ZIP no se creará correctamente. Aquí se necesita un bucle de espera para arreglar eso. Mi ciclo de espera se basa en una respuesta a un problema similar publicado aquí .
Aquí hay una versión actualizada que corrige el error "Objeto requerido" reportado por pihentagy . Es un problema de tiempo ya que el archivo ZIP recién creado se incluye en la colección Items cuando el script se ejecuta en máquinas rápidas.
fuente
Aquí está mi intento de resumir las ventanas de capacidades incorporadas para compresión y descompresión: https://stackoverflow.com/questions/28043589/how-can-i-compres-zip-and-uncopress-unzip-files-and-folders -with-batch-f
con algunas soluciones dadas que deberían funcionar en casi todas las máquinas con Windows.
fuente