Compress-Archive
Crea un archivio ZIP compresso da file e directory specificati.
Sintassi
Compress-Archive
[-Path] <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Compress-Archive
[-Path] <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
-Update
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Compress-Archive
[-Path] <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
-Force
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Compress-Archive
-LiteralPath <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
-Update
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Compress-Archive
-LiteralPath <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
-Force
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Compress-Archive
-LiteralPath <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Descrizione
Il Compress-Archive
cmdlet crea un file di archivio compresso o compresso da uno o più file o directory specificati. Un archivio include più file, con compressione facoltativa, in un singolo file compresso per semplificare la distribuzione e l'archiviazione. Un file di archivio può essere compresso usando l'algoritmo di compressione specificato dal parametro CompressionLevel .
Il Compress-Archive
cmdlet usa l'API System.IO.Compression.ZipArchive per comprimere i file.
L'API limita le dimensioni massime del file a 2 GB. L'API .NET funziona con i file conformi alla specifica ufficiale del formato di file ZIP di PKWARE Inc. Per altre informazioni, vedere System.IO.Compression.ZipArchive.
Nota
Il Compress-Archive
cmdlet ignora i file e le cartelle nascosti durante la creazione o l'aggiornamento del file di archivio. Nei computer non Windows sono inclusi file e cartelle con nome che inizia con il carattere punto (.
).
Per assicurarsi che i file e le cartelle nascosti siano compressi nell'archivio, usare invece l'API .NET.
Alcuni esempi usano lo splatting per ridurre la lunghezza della riga degli esempi di codice. Per altre informazioni, vedere about_Splatting.
Esempio
Esempio 1: Comprimere i file per creare un file di archivio
Questo esempio comprime i file da directory diverse e crea un file di archivio. Un carattere jolly viene usato per ottenere tutti i file con un'estensione di file specifica. Non esiste alcuna struttura di directory nel file di archivio perché il percorso specifica solo i nomi di file.
$compress = @{
Path = "C:\Reference\Draftdoc.docx", "C:\Reference\Images\*.vsd"
CompressionLevel = "Fastest"
DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress
Il parametro Path accetta nomi di file e nomi di file specifici con caratteri jolly, *.vsd
. Il percorso usa un elenco delimitato da virgole per ottenere file da directory diverse. Il livello di compressione è più veloce per ridurre il tempo di elaborazione. Il parametro DestinationPath specifica il percorso del Draft.zip
file. Il Draft.zip
file contiene Draftdoc.docx
e tutti i file con un'estensione .vsd
.
Esempio 2: Comprimere i file usando un valore LiteralPath
In questo esempio vengono compressi file denominati specifici e viene creato un nuovo file di archivio. Non esiste alcuna struttura di directory nel file di archivio perché il percorso specifica solo i nomi di file.
$compress = @{
LiteralPath= "C:\Reference\Draft Doc.docx", "C:\Reference\Images\diagram2.vsd"
CompressionLevel = "Fastest"
DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress
I nomi di file e percorso assoluti vengono usati perché il parametro LiteralPath non accetta caratteri jolly. Il percorso usa un elenco delimitato da virgole per ottenere file da directory diverse. Il livello di compressione è più veloce per ridurre il tempo di elaborazione. Il parametro DestinationPath specifica il percorso del Draft.zip
file. Il Draft.zip
file contiene Draftdoc.docx
solo e diagram2.vsd
.
Esempio 3: Comprimere una directory che include la directory radice
Questo esempio comprime una directory e crea un file di archivio che include la directory radice e tutti i relativi file e sottodirectory. Il file di archivio ha una struttura di directory perché path specifica una directory radice.
Compress-Archive -Path C:\Reference -DestinationPath C:\Archives\Draft.zip
Compress-Archive
usa il parametro Path per specificare la directory radice, C:\Reference
. Il parametro DestinationPath specifica il percorso del file di archivio. L'archivio Draft.zip
include la Reference
directory radice e tutti i relativi file e sottodirectory.
Esempio 4: Comprimere una directory che esclude la directory radice
Questo esempio comprime una directory e crea un file di archivio che esclude la directory radice perché path usa un carattere jolly asterisco (*
). L'archivio contiene una struttura di directory che contiene i file e le sottodirectory della directory radice.
Compress-Archive -Path C:\Reference\* -DestinationPath C:\Archives\Draft.zip
Compress-Archive
usa il parametro Path per specificare la directory radice, C:\Reference
con un carattere jolly asterisco (*
). Il parametro DestinationPath specifica il percorso del file di archivio. L'archivio Draft.zip
contiene i file e le sottodirectory della directory radice. La Reference
directory radice viene esclusa dall'archivio.
Esempio 5: Comprimere solo i file in una directory radice
In questo esempio vengono compressi solo i file in una directory radice e viene creato un file di archivio. Non esiste alcuna struttura di directory nell'archivio perché vengono compressi solo i file.
Compress-Archive -Path C:\Reference\*.* -DestinationPath C:\Archives\Draft.zip
Compress-Archive
usa il parametro Path per specificare la directory radice, C:\Reference
con un carattere jolly star-dot-star (*.*
). Il parametro DestinationPath specifica il percorso del file di archivio. L'archivio Draft.zip
contiene solo i Reference
file della directory radice e la directory radice è esclusa.
Esempio 6: Usare la pipeline per archiviare i file
Questo esempio invia i file nella pipeline per creare un archivio. Non esiste alcuna struttura di directory nel file di archivio perché il percorso specifica solo i nomi di file.
Get-ChildItem -Path C:\Reference\Afile.txt, C:\Reference\Images\Bfile.txt |
Compress-Archive -DestinationPath C:\Archives\PipelineFiles.zip
Get-ChildItem
usa il parametro Path per specificare due file di directory diverse. Ogni file è rappresentato da un oggetto FileInfo e viene inviato alla pipeline a Compress-Archive
.
I due file specificati vengono archiviati in PipelineFiles.zip
.
Esempio 7: Usare la pipeline per archiviare una directory
Questo esempio invia una directory verso il basso nella pipeline per creare un archivio. I file vengono inviati come oggetti FileInfo e directory come oggetti DirectoryInfo . La struttura di directory dell'archivio non include la directory radice, ma i relativi file e sottodirectory sono inclusi nell'archivio.
Get-ChildItem -Path C:\LogFiles | Compress-Archive -DestinationPath C:\Archives\PipelineDir.zip
Get-ChildItem
usa il parametro Path per specificare la C:\LogFiles
directory radice. Ogni oggetto FileInfo e DirectoryInfo viene inviato alla pipeline.
Compress-Archive
aggiunge ogni oggetto all'archivio PipelineDir.zip
. Il parametro Path non viene specificato perché gli oggetti pipeline vengono ricevuti nella posizione del parametro 0.
Esempio 8: Come la ricorsione può influire sugli archivi
Questo esempio mostra come la ricorsione può duplicare i file nell'archivio. Ad esempio, se si usa Get-ChildItem
con il parametro Recurse . Durante i processi di ricorsione, ogni oggetto FileInfo e DirectoryInfo viene inviato alla pipeline e aggiunto all'archivio.
Get-ChildItem -Path C:\TestLog -Recurse |
Compress-Archive -DestinationPath C:\Archives\PipelineRecurse.zip
La C:\TestLog
directory non contiene file. Contiene una sottodirectory denominata testsub
che contiene il testlog.txt
file.
Get-ChildItem
usa il parametro Path per specificare la directory radice, C:\TestLog
. Il parametro Recurse elabora i file e le directory. Viene creato un oggetto DirectoryInfo per testsub
e un oggetto testlog.txt
FileInfo .
Ogni oggetto viene inviato alla pipeline a Compress-Archive
. DestinationPath specifica il percorso del file di archivio. Il parametro Path non viene specificato perché gli oggetti pipeline vengono ricevuti nella posizione del parametro 0.
Il riepilogo seguente descrive il PipelineRecurse.zip
contenuto dell'archivio che contiene un file duplicato:
- L'oggetto DirectoryInfo crea la
testsub
directory e contiene iltestlog.txt
file, che riflette la struttura di directory originale. - L'oggetto FileInfo crea un duplicato
testlog.txt
nella radice dell'archivio. Il file duplicato viene creato perché la ricorsione ha inviato un oggetto file aCompress-Archive
. Questo comportamento è previsto perché ogni oggetto inviato alla pipeline viene aggiunto all'archivio.
Esempio 9: Aggiornare un file di archivio esistente
In questo esempio viene aggiornato un file di archivio esistente, Draft.zip
, nella C:\Archives
directory . In questo esempio il file di archivio esistente contiene la directory radice e i relativi file e sottodirectory.
Compress-Archive -Path C:\Reference -Update -DestinationPath C:\Archives\Draft.zip
Il comando viene aggiornato Draft.zip
con versioni più recenti dei file esistenti nella C:\Reference
directory e nelle relative sottodirectory. Inoltre, i nuovi file aggiunti o C:\Reference
le relative sottodirectory vengono inclusi nell'archivio aggiornato Draft.zip
.
Parametri
-CompressionLevel
Specifica la quantità di compressione da applicare quando si crea il file di archivio. La compressione più veloce richiede meno tempo per creare il file, ma può comportare dimensioni di file maggiori.
Se questo parametro non viene specificato, il comando usa il valore predefinito Optimal.
Di seguito sono riportati i valori accettabili per questo parametro:
- Più veloce. Usare il metodo di compressione più veloce disponibile per ridurre il tempo di elaborazione. Una compressione più rapida può comportare dimensioni di file maggiori.
- NoCompression. Non comprime i file di origine.
- Ottimale. Il tempo di elaborazione dipende dalle dimensioni del file.
Tipo: | String |
Valori accettati: | Optimal, NoCompression, Fastest |
Posizione: | Named |
Valore predefinito: | Optimal |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Confirm
Richiede conferma prima di eseguire il cmdlet.
Tipo: | SwitchParameter |
Alias: | cf |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-DestinationPath
Questo parametro è obbligatorio e specifica il percorso del file di output dell'archivio. DestinationPath deve includere il nome del file compresso e il percorso assoluto o relativo del file compresso.
Se il nome file in DestinationPath non dispone di un'estensione .zip
del nome file, il cmdlet aggiunge l'estensione del .zip
nome file.
Tipo: | String |
Posizione: | 1 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Force
Usare questo parametro per sovrascrivere un file di archivio esistente.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | True |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-LiteralPath
Specifica il percorso o i percorsi dei file da aggiungere al file compresso archivio. A differenza del parametro Path , il valore di LiteralPath viene usato esattamente come viene tipizzato. Nessun carattere viene interpretato come carattere jolly. Se il percorso include caratteri di escape, racchiudere ogni carattere di escape tra virgolette singole per indicare a PowerShell di non interpretare i caratteri come sequenze di escape. Per specificare più percorsi e includere file in più posizioni nel file compresso di output, usare le virgole per separare i percorsi.
Tipo: | String[] |
Alias: | PSPath |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-PassThru
Fa sì che il cmdlet restituisca un oggetto file che rappresenta il file di archivio creato.
Questo parametro è stato introdotto in PowerShell 6.0.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Path
Specifica il percorso o i percorsi dei file da aggiungere al file compresso archivio. Per specificare più percorsi e includere file in più posizioni, usare le virgole per separare i percorsi.
Questo parametro accetta caratteri jolly. I caratteri jolly consentono di aggiungere tutti i file in una directory al file di archivio.
L'uso di caratteri jolly con una directory radice influisce sul contenuto dell'archivio:
- Per creare un archivio che include la directory radice e tutti i relativi file e sottodirectory, specificare la directory radice nel percorso senza caratteri jolly. Ad esempio:
-Path C:\Reference
- Per creare un archivio che esclude la directory radice, ma comprime tutti i relativi file e sottodirectory, usare il carattere jolly asterisco (
*
). Ad esempio:-Path C:\Reference\*
- Per creare un archivio che comprime solo i file nella directory radice, usare il carattere jolly star-dot-star (
*.*
). Le sottodirectory della radice non sono incluse nell'archivio. Ad esempio:-Path C:\Reference\*.*
Tipo: | String[] |
Posizione: | 0 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | True |
-Update
Aggiorna l'archivio specificato sostituendo le versioni precedenti dei file nell'archivio con versioni di file più recenti con gli stessi nomi. È anche possibile aggiungere questo parametro per aggiungere file a un archivio esistente.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | True |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-WhatIf
Mostra gli effetti dell'esecuzione del cmdlet. Il cmdlet non viene eseguito.
Tipo: | SwitchParameter |
Alias: | wi |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
Input
È possibile inviare tramite pipe una stringa contenente un percorso a uno o più file.
Output
None
Per impostazione predefinita, questo cmdlet non restituisce alcun output.
Quando si utilizza il parametro PassThru , questo cmdlet restituisce un oggetto FileInfo .
Note
L'uso della ricorsione e l'invio di oggetti nella pipeline possono duplicare i file nell'archivio. Ad esempio, se si usa Get-ChildItem
con il parametro Recurse , ogni oggetto FileInfo e DirectoryInfo inviato alla pipeline viene aggiunto all'archivio.
Il Compress-Archive
cmdlet usa la codifica UTF-8. Altri strumenti di archivio ZIP possono usare uno schema di codifica diverso. Quando si estraggono file con nomi file non archiviati usando la codifica UTF-8, Expand-Archive
usa il valore non elaborato trovato nell'archivio. Ciò può comportare un nome file diverso dal nome file di origine archiviato nell'archivio.