7-Zipのコマンドライン操作

スポンサーリンク

とっても便利かつオープンソースでフリーな圧縮・解凍ソフトのひとつに「7-Zip」というものがあります。
名前の通りzipファイルを圧縮・解凍できたり、独自形式7zとして圧縮・解凍できたりします。

7-Zip公式サイトはこちら

圧縮・解凍ソフト 7-Zip
圧縮・解凍ソフト7-Zipは、7z、ZIP、RAR、LZH、ISO、TAR、DMG、MSIなど、さまざまなデータフォーマットに1つで対応している世界的にデファクトのフリーソフトウェアです。AES256による暗号化(パスワード圧縮および解凍)...

Win64bit版ダウンロードリンクはこちら(2024/5/7現在)

ところで、この7-Zip、本来はGUIアプリなのですが、実はコマンドラインツールとして使うこともできます。
コマンドプロンプトに

"C:\Program Files-Zipz.exe"

と打ち込むことで起動します。環境変数PATHを通していると(後述)、「7z」と打つだけでも起動できます。

スポンサーリンク

環境変数PATHに7-Zipを追加

これはお好みですが、便利なので追加しましょう。方法はWindows7とWindows10で若干違うみたいですが、どっちも通用する方法を紹介します。

まず、エクスプローラーを開いて、左側のメニューにある「PC」を右クリックし、「プロパティ」を選択します。

「システム」というウィンドウが開くので、「システムの詳細設定」をクリックします。

「システムのプロパティ」ウィンドウが開くので、「環境変数」をクリックします。

「環境変数」ウィンドウが開くので、「システム環境変数」内の「Path」をクリックし、「編集」をクリックして、”C:\Program Files\7-Zip\”を加えてください。

私の環境では、次のようになっていました。
C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;%SystemRoot%\system32~~~~略~~~~C:\Program Files (x86)\QuickTime\QTSystem\
このように、様々なアドレスが、コロン;で挟まれています。
これの最後尾にC:\Program Files\7-Zip\を加えて、
C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;%SystemRoot%\system32~~~~略~~~~C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files\7-Zip\
こんな感じにします。

以下では、

"C:\Program Files-Zipz.exe" [コマンド]

と打ち込む部分を、Pathを通している前提で、

7z [コマンド]

としています。もしPathを通さないのであれば、適宜書き換えてください。

 コマンドリファレンス

7zipをコマンド引数をつけずに実行すると、コマンドリファレンスが表示されます。

Usage: 7z <command> [<switches>...] <archive_name> [<file_names>...] [@listfile]

<Commands>
a : Add files to archive
b : Benchmark
d : Delete files from archive
e : Extract files from archive (without using directory names)
h : Calculate hash values for files
i : Show information about supported formats
l : List contents of archive
rn : Rename files in archive
t : Test integrity of archive
u : Update files to archive
x : eXtract files with full paths

<Switches>
-- : Stop switches and @listfile parsing
-ai[r[-|0]][m[-|2]][w[-]]{@listfile|!wildcard} : Include archives
-ax[r[-|0]][m[-|2]][w[-]]{@listfile|!wildcard} : eXclude archives
-ao{a|s|t|u} : set Overwrite mode
-an : disable archive_name field
-bb[0-3] : set output log level
-bd : disable progress indicator
-bs{o|e|p}{0|1|2} : set output stream for output/error/progress line
-bt : show execution time statistics
-i[r[-|0]][m[-|2]][w[-]]{@listfile|!wildcard} : Include filenames
-m{Parameters} : set compression Method
-mmt[N] : set number of CPU threads
-mx[N] : set compression level: -mx1 (fastest) ... -mx9 (ultra)
-o{Directory} : set Output directory
-p{Password} : set Password
-r[-|0] : Recurse subdirectories for name search
-sa{a|e|s} : set Archive name mode
-scc{UTF-8|WIN|DOS} : set charset for console input/output
-scs{UTF-8|UTF-16LE|UTF-16BE|WIN|DOS|{id}} : set charset for list files
-scrc[CRC32|CRC64|SHA256|SHA1|XXH64|*] : set hash function for x, e, h commands
-sdel : delete files after compression
-seml[.] : send archive by email
-sfx[{name}] : Create SFX archive
-si[{name}] : read data from stdin
-slp : set Large Pages mode
-slt : show technical information for l (List) command
-snh : store hard links as links
-snl : store symbolic links as links
-sni : store NT security information
-sns[-] : store NTFS alternate streams
-so : write data to stdout
-spd : disable wildcard matching for file names
-spe : eliminate duplication of root folder for extract command
-spf[2] : use fully qualified file paths
-ssc[-] : set sensitive case mode
-sse : stop archive creating, if it can't open some input file
-ssp : do not change Last Access Time of source files while archiving
-ssw : compress shared files
-stl : set archive timestamp from the most recently modified file
-stm{HexMask} : set CPU thread affinity mask (hexadecimal number)
-stx{Type} : exclude archive type
-t{Type} : Set type of archive
-u[-][p#][q#][r#][x#][y#][z#][!newArchiveName] : Update options
-v{Size}[b|k|m|g] : Create volumes
-w[{path}] : assign Work directory. Empty path means a temporary directory
-x[r[-|0]][m[-|2]][w[-]]{@listfile|!wildcard} : eXclude filenames
-y : assume Yes on all queries

主なコマンド一覧

  • a:アーカイブ(圧縮ファイル)にファイルを追加
  • b:ベンチマーク(圧縮・解凍速度計測)
  • d:アーカイブ内から指定ファイルを削除
  • e:アーカイブからファイルを展開(ディレクトリ構造無視)
  • x:アーカイブからファイルを展開(ディレクトリ構造保持)
  • l:アーカイブの内容一覧表示
  • t:アーカイブの整合性テスト
  • u:既存アーカイブの更新
  • rn:アーカイブ内ファイルのリネーム

主なスイッチ(オプション)

  • -mmt[N]:CPUスレッド数指定(マルチスレッド有効化)
  • -mx[1-9]:圧縮率指定(数字が大きいほど高圧縮。-mx9が最大圧縮)
  • -t{形式}:アーカイブ形式指定(例:-tzip-txz-tgzipなど)
  • -r:サブディレクトリを再帰的に処理
  • -p{パスワード}:パスワード付きアーカイブ作成・展開
  • -o{ディレクトリ}:展開時の出力先ディレクトリ指定
  • -sdel:圧縮成功後、元ファイルを削除
  • -ssw:他アプリ使用中でも強制的にファイルを圧縮
  • -v{サイズ}:分割ボリュームを作成(バックアップや大容量ファイルの分割に便利)
  • -y:すべてのプロンプトに「Yes」で応答(自動化時に便利)
  • -bb[0-3]:ログレベル変更(冗長な出力制御)
  • -so/-si:標準出力/標準入力との連携(パイプ処理などで有用)

ここから、このなかで有用なコマンドを紹介します。

圧縮コマンド

基本的な圧縮の使い方は、

7z a [圧縮した後の名前] [圧縮したいものの名前]

になります。圧縮するには”a”(addという意味らしい)というオプションが必要になっています。
たとえば、sample.txtを、archive.zipに圧縮したければ、

7z a archive.zip sample.txt

となります。

もちろん、複数ファイルを一つの圧縮ファイルにすることもできます。

sample1.txt、sample2.txt、sample3.txtを、archive.zipに圧縮したければ、

7z a archive.zip sample1.txt sample2.txt sample3.txt

となります。sample.txtの部分がディレクトリでも問題なくフォルダごと圧縮してくれます。

さらに、すでに存在する圧縮ファイル(zip等)に、ファイルを追加したいときもこのコマンドは使えます。

7z a archive.zip add.txt

オプション

いくつかのオプションを紹介します。

-mmt=on :マルチスレッド化
-mx=9:圧縮率(大きいほど高圧縮。9が最大)
-ssw:他のアプリが使用中のファイルも圧縮(使い方によれば危険ですが、)
-t[形式]:圧縮ファイルの形式を指定します。gzipならば-tgzip、xzならば-txzとなります。
-sdel :圧縮が終わったら、もとのファイルは消すというオプションです。
7z a archive.7z folder\ -mx=9 -mmt=on -t7z

とすれば、folder内の全ファイルを7z形式で最大圧縮(-mx=9)、マルチスレッド(-mmt=on)で圧縮します。

サンプルスクリプト

これらのコマンドを活用して、「指定フォルダ以下の全ファイルを、xzファイルに圧縮」というbatファイルを書いてみました。

@echo off
pause

SET EXCLUDE_FILE_EXT=.xz
SET SRC_DIR="L:\"

rem for /f %%i in (%SRC_DIR%\*) do (
for /f "usebackq" %%i in (`dir /B /S "%SRC_DIR%"`) do (

    if /I not "%%~xi"=="%EXCLUDE_FILE_EXT%" "C:\Program Files-Zipz.exe" a -mmt=on -mx=9 -ssw -txz -sdel %%i.xz %%i

)

pause

解凍コマンド

もちろん、解凍も行えます。基本的な使い方は、

7z e [解凍したいものの名前]

または

7z x [解凍したいものの名前]

です。xとeの違いは、

x:フォルダ構成を再現して解凍
e:ぜんぶその場所(同じ場所)に解凍

です。目的に応じて使ってください。つまり、

7z x archive.zip

で、archive.zipを現行ディレクトリ配下にそのままの階層で展開します。

7z e archive.zip

で、archive.zipからすべてのファイルをカレントディレクトリに平坦に展開します。

パスワード保護されたアーカイブの解凍例

7z x archive.7z -pPASSWORD

で、パスワードPASSWORDを用いて解凍します。

指定ディレクトリへ解凍

7z x archive.zip -oC:\temp

で、C:\tempディレクトリへ解凍します(存在しない場合はディレクトリ作成されませんので、あらかじめ作成してください)。

サンプルスクリプト

これを利用して、「指定フォルダ以下にある全てのgzファイルを解凍し、もとのファイルは削除」というbatファイルを作りました。

@echo off
pause

SET EXCLUDE_FILE_EXT=.gz
SET SRC_DIR="L:\"

rem for /f %%i in (%SRC_DIR%\*) do (
for /f "usebackq" %%i in (`dir /B /S "%SRC_DIR%"`) do (

    if /I "%%~xi"=="%EXCLUDE_FILE_EXT%" "C:\Program Files-Zipz.exe" e -mmt=on -mx=9 -ssw -tgzip %%i -o%%~dpi && del %%i
    
)

pause

batファイルは自己責任で使ってください。

応用コマンド

役立ちそうな応用コマンドを記載しておきます。

パスワード付きアーカイブ7z a archive.7z file.txt -pSECRETでパスワードSECRET付き7zファイルを作成可能。

分割ボリュームの作成7z a archive.zip folder\ -v10mとすれば、archive.z01, archive.z02… と約10MBごとの分割ファイルを生成できます。

特殊文字やUnicodeファイル名対応-sccUTF-8-scsUTF-8オプションで文字エンコーディングを指定してトラブルを回避。

標準入出力活用-so-siを利用することで、パイプ(|)を使った他のコマンドとの連携が可能。例:type myfile.txt | 7z a -si myfile.7zで標準入力から圧縮できます。

他形式への変換7z x oldarchive.rar -so | 7z a -si newarchive.7zのようにパイプを用いて異なる形式から再圧縮することも可能。

コメント

タイトルとURLをコピーしました