it-swarm.it

Come puoi Zip o decomprimere dallo script utilizzando SOLO le funzionalità integrate di Windows?

In Windows puoi Zip alcuni file di

tasto destro -> invia a -> cartella compressa (zippata)

E unzip facendo doppio clic sul file .Zip ed estrai i file.

C'è un modo per applicare tali abilità da uno script (file .bat) senza la necessità di installare terze parti ?

253
Roee Gavirel

Nel 2013 non era possibile. MS non ha fornito alcun eseguibile per questo.

Vedi questo link per alcuni modi VBS per fare questo. https://superuser.com/questions/201371/create-Zip-folder-from-the-command-line-windows

Da Windows 8 in poi, .Net Framework 4.5 è installato per impostazione predefinita, con System.IO.Compression.ZipArchive e PowerShell disponibili, uno può scrivere script per ottenere ciò, vedere https://stackoverflow.com/a/26843122/71312

74
Diryboy

Per espandere la soluzione PowerShell di Steven Penny, è possibile incorporarla in un file batch chiamando powershell.exe in questo modo:

powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.Zip', 'bar'); }"

Come ha detto Ivan Shilo, questo non funzionerà con PowerShell 2, richiede PowerShell 3 o versione successiva e .NET Framework 4.

163
Jason Duffett

A partire da .NET 4.5 , PowerShell può fare questo:

Add-Type -A System.IO.Compression.FileSystem
[IO.Compression.ZipFile]::CreateFromDirectory('foo', 'foo.Zip')
[IO.Compression.ZipFile]::ExtractToDirectory('foo.Zip', 'bar')

Per le ultime due righe, bar e foo possono essere sostituite con il nome che si desidera abbia la cartella, o qualunque sia il nome della cartella preesistente. foo.Zip in entrambi i casi funge da file Zip per salvare come o per decomprimere da.

149
Steven Penny

Se hai Java installed, puoi comprimere in archivio Zip usando jar command:

jar -cMf targetArchive.Zip sourceDirectory

c = Crea un nuovo file di archivio.

M = Specifica che un file manifest non deve essere aggiunto all'archivio.

f = Indica il nome del file di destinazione.

120
Noam Manos

PowerShell 5.0

Da Microsoft.PowerShell.Archive puoi usare:

Per esempio.:

  • Crea result.Zip dall'intera cartella Test:

    Compress-Archive -Path C:\Test -DestinationPath C:\result
    
  • Estrai il contenuto di result.Zip nella cartella Test specificata:

    Expand-Archive -Path result.Zip -DestinationPath C:\Test
    
59
ROMANIA_engineer

Non è esattamente un Zip ma l'unico modo per comprimere un file usando gli strumenti di Windows è:

makecab <source> <dest>.cab

Per decomprimere:

expand <source>.cab <dest>

Esempio avanzato (da 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"

Maggiori informazioni: makecab , expand , usi avanzati di makecab

35

Usando 7-Zip:

Zip : hai una cartella foo, e vuoi comprimerla con myzip.Zip

"C:\Program Files\7-Zip\7z.exe" a  -r myzip.Zip -w foo -mem=AES256

Unzip : vuoi decomprimerlo (myzip.Zip) nella directory corrente (./)

"C:\Program Files\7-Zip\7z.exe" x  myzip.Zip  -o./ -y -r
27
Monir

Ho cercato di rispondere a questa domanda esatta e dalla mia ricerca, la risposta di DiryBoy sembra essere accurata.

Ho trovato che il programma compact.exe comprime i file ma non crea un file altamente compresso (o un insieme di file). È simile all'opzione che si ottiene facendo clic con il tasto destro su una lettera di unità o partizione in Windows. Hai la possibilità di fare pulizia (rimuovere i file temporanei, ecc.) E di comprimere i file. I file compressi sono ancora accessibili ma sono compressi per creare spazio su un'unità con poco spazio.

Ho anche trovato compress.exe che mi è capitato di avere sul mio computer. Non è nativo sulla maggior parte delle macchine Windows e fa parte del kit delle risorse del 2003. Crea un file zippato, ma è molto più simile ai file di un disco di installazione di Windows (ha il carattere di sottolineatura come ultimo carattere dell'estensione o del nome del file). E il comando extract.exe estrae quei file.

Tuttavia, il mantra è, se può essere fatto in modo nativo tramite la GUI, allora c'è probabilmente un modo per farlo tramite batch, .vbs, o qualche altro tipo di script all'interno della linea di comando. Poiché Windows ha avuto l'opzione 'invia a' per creare un file Zip, sapevo che ci doveva essere un modo per farlo tramite la linea di comando e ho trovato alcune opzioni.

Ecco un ottimo collegamento che mostra come comprimere un file usando i comandi nativi di Windows.

https://superuser.com/questions/110991/can-you-Zip-a-file-from-the-command-Prompt-using-only-windows-built-in-capabili

L'ho provato con una directory contenente più file e cartelle annidati e ha funzionato perfettamente. Basta seguire il formato della riga di comando.

C'è anche un modo per decomprimere i file tramite la riga di comando che ho trovato pure. Un modo, apre semplicemente una finestra di Explorer che mostra qual è il contenuto del file zippato. Alcuni di questi usano anche Java che non è necessariamente nativo di Windows, ma è così comune che sembra quasi così.

https://superuser.com/questions/149489/does-windows-7-have-unzip-at-the-command-line-installed-by-default

Come decomprimere un file usando la riga di comando?

8
LostUser

È possibile utilizzare un vbsscript avvolto in un file BAT. Questo codice funziona su un PERCORSO relativo.

Non sono necessari strumenti o dipendenze di terze parti. Basta impostare SOURCEDIR e OUTPUTZIP.

nome file: ZipUp.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

Esempio di utilizzo

SET SOURCEDIR=C:\Some\Path
SET OUTPUTZIP=C:\Archive.Zip
CALL ZipUp

In alternativa, puoi parametrizzare questo file sostituendo la riga CScript _zipup.vbs %SOURCEDIR% %OUTPUTZIP% con CScript _zipup.vbs %1 %2, nel qual caso può essere anche più facilmente richiamato semplicemente chiamando CALL ZipUp C:\Source\Dir C:\Archive.Zip

6
PodTech.io

L'open source è tuo amico :-)

Ecco lo UNZIP: http://gnuwin32.sourceforge.net/packages/unzip.htm

C'è anche un comando Zip: http://gnuwin32.sourceforge.net/packages/Zip.htm

Il download dei binari è sufficiente.

3
JanBorup

Se hai bisogno di farlo come parte di uno script, il modo migliore è usare Java. Supponendo che la directory bin sia nel tuo percorso (nella maggior parte dei casi), puoi usare la riga di comando:

jar xf test.Zip

se Java non è direttamente sul riferimento del pass:

C:\Java\jdk1.6.0_03\bin>jar xf test.Zip
2
eddyoc

Dici che stai provando a farlo senza un software di terze parti. Non sono sicuro che considereresti .NET un software di "terze parti".

Ma puoi creare la tua utilità da riga di comando in .NET. Non dovrebbe richiedere più di poche righe di codice.

https://msdn.Microsoft.com/en-us/library/system.io.compression.zipfile(v=vs.110).aspx

1
NL3294