[7-Zip] PowerShell のコマンドラインから圧縮して、自動バックアップスケジュールを組む

7-Zip は優秀なファイルアーカイバであるが、素晴らしいことにコマンドラインから操作することもできる。これによりバッチで定期的にファイルを圧縮してバックアップということが簡単に行える。PowerShell からでも簡単な記述で圧縮可能。
7-Zip のコマンドライン版は、ここからダウンロードできる。
# 圧縮対象フォルダ
$copyFolderName = "wk"
$copy = "D:\" + $copyFolderName

# 圧縮先 (圧縮元フォルダ名)
$destinationFolder  = "D:\"
$destination = $destinationFolder + (Get-Date -Format yyyyMMdd) + "_" + $copyFolderName + ".7z"

# -MMT=ON:マルチスレッド
# -MX=9:圧縮率 (9=高圧縮)
# -SSW:開かれているファイルも圧縮対象ファイルとして含める
D:\7za.exe a $destination $copy -MMT=ON -MX=9 -SSW
上の例だと、7-Zip 本体が D ドライブに配置してある想定。「D:\wk」 フォルダを圧縮日を付与したファイル名で 7z 形式に圧縮している。コメントにある通り、オプションでマルチスレッドにも対応している。
-SSW スイッチは、圧縮時にファイルが使用中だった場合 (Excel ファイルが開かれている等) 、そのファイルも圧縮対象に含められるようになっている。このオプションを付けないと、ロックされているファイルは圧縮されないので注意。

PowerShell での例だが、ようは 7-Zip のパスを指定して、"a {コピーファイルパス} {コピー元パス}" と、記述しているだけ。


これを 「.ps1」 形式で保存して、タスクスケジューラーに登録すると自動バックアップができる。PowerShell が入っていればの話だが (Windows 7 以降なら問題ない) 。

ただし、注意しなければいけないのは、操作の編集ではプログラムに 「powershell」、引数の追加に対象の 「.ps1」 ファイルを指定する。

このブログの人気の投稿

Excel で入力した文字に勝手に取り消し線が入る

コピーした行の挿入が表示されない時はフィルタされていないかチェック