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.txt と bbb.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フォルダを指定して圧縮
カレントディレクトリのフォルダ ccc を compressed.zip として圧縮するには、以下の通りに実行します。
Compress-Archive -Path ccc -DestinationPath compressed.zip -Forceこの場合、出来上がった compressed.zip を右クリックして『ここに解凍』した時に出てくるフォルダの名前は ccc になります。
PowerShellスクリプト化してみる
個人的な話ですが、この記事の内容は、リリース用のファイルをzipで固めるのを自動化したくて調べたんでした。なのでPowerShellスクリプト化します。
以下の内容を zip.ps1 として保存します。(PowerShellスクリプトの拡張子は 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.txt と bbb.txt を compressed.zip として圧縮してくれます。
参考にさせていただいた記事
Powershellでzipファイルを作る - DISTRICT 37
管理者権限なしでPowerShellスクリプトを実行する方法 - Qiita
PowerShell/ファイル操作/ファイル・フォルダの存在確認 Test-Path - yanor.net
キリウ君が読まないノート