ディレクトリの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.