ディレクトリのZIPアーカイブを実施する

Compress-Archive コマンドで圧縮を実施します。

-Path でアーカイブ対象のディレクトリ、または、ファイルを指定します。
-DestinationPath で出力アーカイブファイルの名前を指定します。

-CompressionLevel で圧縮率を決定します。

  • "NoCompression" は無圧縮でファイル結合のみ
  • "Fastest" は高速に圧縮するがサイズは大きめ
  • "Optimal" は低速な圧縮だがサイズは小さめ

-CompressionLevel を指定しない場合はデフォルトで "Optimal" になります。巨大なディレクトリをアーカイブするとかなりの時間がかかりますので要注意です。

-Force オプションを用いれば、同名のアーカイブファイルとして強制上書きできます。

# ユーザに圧縮率を選択させる.
$str_console_out = "(n)oCompression, (f)astest, (o)ptimal"
$str_input = Read-Host $str_console_out

# キー入力を強制的に小文字に変更する.
$str_input = $str_input.ToLower()

# キー入力によって圧縮率を変更する.
if ( $str_input -eq "n" )
{
    # 圧縮なし tar 的に結合するだけなのでサイズは大きくなる.
    $type_comp = "NoCompression"
}
elseif ( $str_input -eq "f" )
{
    # 高速に圧縮するがサイズは大きめ.
    $type_comp = "Fastest"
}
elseif ( $str_input -eq "o" )
{
    # 低速な圧縮だがサイズは小さめ.
    $type_comp = "Optimal"
}
else
{
    # n, f, o 以外の入力だと中断終了する.
    Write-Host( "Error: Key input is invalid." )
    exit
}

# 開始時間を表示する.
$dtm_beg = Get-Date
Write-Host( $dtm_beg )

# 圧縮タイプを表示する.
Write-Host( $type_comp )

# 圧縮 ZIP を実行する,同名のファイルがあれば強制上書きする.
$dirpath_src = "c:/tmp/record"
$filepath_dst = "e:/my_archive.zip"
Compress-Archive -Path $dirpath_src -DestinationPath $filepath_dst -CompressionLevel $type_comp -Force

# 終了時間を表示する.
$dtm_end = Get-Date
Write-Host( $dtm_end )

# 経過秒数を計算する.
$tsp = $dtm_end - $dtm_beg
$sec = [int]( $tsp.TotalSeconds )

# 経過秒数とともに成功終了を表示する.
$str = "{0}sec, finished." -f $sec
Write-Host( $str )

下記が実行結果です。

(n)oCompression, (f)astest, (o)ptimal: f
2022/07/03 12:18:29
Fastest
2022/07/03 12:20:47
138sec, finished.