Share via


Compress-Archive

Crea un archivio compresso, o un file 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. 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é pathusa 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.txtFileInfo .

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 il testlog.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 a Compress-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.
Type:String
Accepted values:Optimal, NoCompression, Fastest
Position:Named
Default value:Optimal
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

Richiede conferma prima di eseguire il cmdlet.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters: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.

Type:String
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Force

Usare questo parametro per sovrascrivere un file di archivio esistente.

Type:SwitchParameter
Position:Named
Default value:False
Required:True
Accept pipeline input:False
Accept wildcard characters: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.

Type:String[]
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters: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.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters: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\*.*
Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-Update

Aggiornamenti l'archivio specificato sostituendo le versioni precedenti dei file nell'archivio con le versioni più recenti dei file con gli stessi nomi. È anche possibile aggiungere questo parametro per aggiungere file a un archivio esistente.

Type:SwitchParameter
Position:Named
Default value:False
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Mostra gli effetti dell'esecuzione del cmdlet. Il cmdlet non viene eseguito.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

String

È 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.

FileInfo

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.