こうこく
作 ▸
改 ▸

Windows 10でコマンドラインから複数のファイル・フォルダをzip圧縮

  • コマンドプロンプト (cmd.exe) にはzip圧縮のコマンドが無い。
  • PowerShellの Compress-Archive コマンドを使う。
もくじ

Caution

この記事の方法で作ったzipファイルをAWS Lambdaにアップロードしたら、パスのセパレータがバックスラッシュになってました。

Linuxに持っていく場合は、潔く zip コマンドを入れて作った方がいいと思います。

Windowsで zip を使う方法は以下記事が参考になりました。

Windowsのコマンドプロンプトでzipコマンドを使用可能にする方法 - Qiita

ファイル名を指定して圧縮

あらかじめ、PowerShellを開いて作業ディレクトリに cd しているものとします。(PowerShellは、スタートメニューから『Windows PowerShell』を探すか、タスクバーの検索ボックスに『PowerShell』と入力すれば出てきます。)

カレントディレクトリのファイル aaa.txtbbb.txt を、compressed.zip として圧縮するには、以下の通りにコマンド実行します。

Compress-Archive -Path aaa.txt,bbb.txt -DestinationPath compressed.zip -Force

-Force と -Update

-Force は、すでに -DestinationPath のファイルが存在したら上書きするようにというオプションです。つけないと、すでに同名のzipファイルが存在した場合にエラーとなります。

類似のオプションで -Update というのもありますが、そっちは既存のzipファイルに新しいzipファイルを結合して更新するものです。例えば以下のコマンドで作成した compressed.zip には、最終的に aaa.txt bbb.txt 両方とも残ってます。

# aaa.txt, bbb.txt を作成
Write-Output aaa > aaa.txt
Write-Output bbb > bbb.txt

# aaa.txt, bbb.txt で compressed.zip 作成
Compress-Archive -Path aaa.txt,bbb.txt -DestinationPath compressed.zip

# aaa.txt だけで compressed.zip 作成 (Update)
Compress-Archive -Path aaa.txt -DestinationPath compressed.zip -Update

ワイルドカードでファイルを指定して圧縮

カレントディレクトリに存在する、ファイル名が .txt で終わる全てのファイルを compressed.zip として圧縮するには、以下の通りに実行します。

Compress-Archive -Path *.txt -DestinationPath compressed.zip -Force

フォルダを指定して圧縮

カレントディレクトリのフォルダ ccccompressed.zip として圧縮するには、以下の通りに実行します。

Compress-Archive -Path ccc -DestinationPath compressed.zip -Force

この場合、出来上がった compressed.zip を右クリックして『ここに解凍』した時に出てくるフォルダの名前は ccc になります。

PowerShellスクリプト化してみる

個人的な話ですが、この記事の内容は、リリース用のファイルをzipで固めるのを自動化したくて調べたんでした。なのでPowerShellスクリプト化します。

以下の内容を zip.ps1 として保存します。(PowerShellスクリプトの拡張子は ps1 らしいです。)

zip.ps1
# 実行ポリシーを設定しないと赤いメッセージが出るので
Set-ExecutionPolicy RemoteSigned -Scope Process

# 作成するzipファイル名を変数で定義
$zipname = "compressed.zip"

# aaa.txt と bbb.txt を compressed.zip として圧縮、すでに存在すれば上書き
Compress-Archive -Path aaa.txt,bbb.txt -DestinationPath compressed.zip -Force

起動するには、できあがったファイルを右クリックして『PowerShellで実行』を選択します。

するとこのスクリプトの場合、カレントディレクトリのファイル aaa.txtbbb.txtcompressed.zip として圧縮してくれます。

参考にさせていただいた記事

Powershellでzipファイルを作る - DISTRICT 37

管理者権限なしでPowerShellスクリプトを実行する方法 - Qiita

PowerShell 使い方メモ - Qiita

PowerShell/ファイル操作/ファイル・フォルダの存在確認 Test-Path - yanor.net

【Windows PowerShell】ファイルやディレクトリの存在を確認する - Muni Bus

コメントの書き方[PowerShell] : バヤシタ

PowerShellの"罠"と呼ばれるモノについて - しばたテックブログ

この記事に何かあればこちらまで (非公開)