7zipで選択したファイル/ディレクトリごとに個別のzipファイルを作成するにはどうすればよいですか?


30

これは、Total Commanderの内部zipパッカーです。

Total Commander zip packerダイアログボックスの写真。

ただし、7zipパッカーを使用します。5つのファイルを選択すると、選択したファイルごとに5つの個別の.zipアーカイブが取得されます。7zipでそれを行うにはどうすればよいですか?

回答:


54

グラフィカルユーザーインターフェイスを使用して提案されていることを実行できるかどうかはわかりませんが、コマンドラインからは確実に実行できます。

FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i"

最初にディレクトリ(cdコマンド)をディレクトリに変更F:\Downloadsするか、大量圧縮を実行するディレクトリを変更する必要があります。また、*。exeまたはフィルター処理する拡張子を、それらのドキュメントを圧縮するために置き換えるだけでも十分に簡単です。

そして、シークレットデコーダーリング:

  • %i ループの各ステップのファイル名を保持する変数です
  • (*.*) 選択基準であり、簡単に* .exeまたは類似のものにすることができます
  • 7z.exe 7-Zipのコマンドラインバージョンです
  • %~ni -これは%i変数をファイル名のみに展開します-拡張子なし

特定のディレクトリにフォルダを追加するだけの場合、デフォルトではFORがファイルに対してのみ機能するため、コマンドはもう少し複雑です。追加情報を提供する必要があります。

FOR /F "usebackq delims=?" %i IN (`DIR /B /A:D`) DO 7z.exe a "%i.7z" "%i"

これは、魔法のように見える部分がいくつかあるため機能します。

  • /F ()で展開された値を反復処理するようにFORに指示します
  • usebackq コマンドを渡し、出力を使用して反復することをFORに伝えます
  • delims=?トークンをバラバラにしたい?-ファイル名とディレクトリの違法文字 トークンが1つだけ欲しい。
  • /B中には、DIRのためにある裸のフォーマット名前だけ-
  • /A:D中には、DIR属性によって結果を制限するため、Dは、ディレクトリのためです

これをバッチファイル内にカプセル化する場合、必要な変更は、%i変数を二重エスケープすることだけです。

FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"

はい、あなたのものは7zアーカイブです、zipアーカイブが欲しいです!代わりに%〜ni.zipですか?
不機嫌なオール

さらに良いことに、私はzipまたは7zの超圧縮が必要です。そして、d:\ packedにパックします。しかし、これまでのところあなたの方法は機能します!
不機嫌なオール

1
わかった、ありがとう!FOR%i IN()DO 7z.exe a "i:\ packed \%〜ni.7z" "%i" -mx9
不機嫌なオール

ところで、バッチファイルでそれを行う方法を教えてもらえますか?すなわちsperate-archive.bat
不機嫌なオール

おかげで、そのスクリプトにフォルダ全体を追加するにはどうすればよいですか?
不機嫌なオール

15

Goyuixの答えが好きです。ただし、Windows 7を使用している(またはPower Shellをインストールしている)場合、コマンドラインバージョンの7-zip 7za.exeも使用する場合は、次のコマンドを実行できます。

dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }

「dir」を「dir * .exe」に変更して、実行可能ファイルのみを選択することもできます。

Power Shellの良い点の1つは、文字列ではなくオブジェクトを使用していることです。そのため、必要に応じて本当に具体的になります。例えば:

dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }

これには、次のファイルのみが含まれます。

  1. csv拡張子があります
  2. サイズが18,900バイト未満
  3. 最終変更日:2011年7月1日以降

編集 7-zipファイルではなくzipファイルが必要な場合は、代わりにInfoZipのzip.exeを使用します。


4
7-zipはzipファイルを作成することもできます--tフラグを見てください。例:7z a -tzip archive.zip *.exe
Goyuix

OK、$ _。BaseName $ _。Nameは機能しますが、別のドライブの別のディレクトリで$ _。BaseName $ _。Nameを実行するにはどうすればよいですか?f:\ test \ file1.7zなどと言う
不機嫌なオール

0

Total Commander用の7zipプラグインをhttp://www.ghisler.com/plugins.htmからダウンロードしてインストールできます 。スクリーンショットのウィンドウの右側でこれを行うと、7zip圧縮用の別の選択項目が表示されます。そのオプションを使用すると、求めていることを正確に達成できます。


0

私はちょうど「FOO」と呼ばれるフォルダを圧縮する際に含むアーカイブはつまり、正確に私が見つけた問題のこの問題、もう1つはアーカイブ内のフォルダ名の重複した上で作業してきた.\foo\fighters.txt代わりに含む一つだけで作られていますfighters.txt

したがって、答えは、処理中のディレクトリに移動し、アーカイブを前の(ルート)ディレクトリに表示してから、次のフォルダを処理するためにそのディレクトリに戻ることです。

また、ルートディレクトリ内の既存のZIPファイルとCMDファイルを7ZIPで無視して、アーカイブ内で終了しないようにすることも重要です。したがって、-x!*.zipおよび-x!*.cmd除外引数です。

このスクリプトは、再帰的なフォルダー構造も維持します。

@echo off

REM Ensures variables set within the batch file are local to
REM this script only and will be removed when finished.
setlocal

if exist *.zip goto zip_exist

for /d %%X in (*) do (
    cls
    cd /D %%X
    "e:\Program Files\7-Zip\7z.exe" a -r  -x!*.zip -x!*.cmd "..\%%X.zip" "*.*"
    cd ..
)
goto end

:zip_exist
Echo.
Echo Note: for this script to work, compression of
Echo pre-existing zip files is not possible.

:end
pause

上記のコードは、「compress_dirs.cmd」などのバッチファイルにコピーし、圧縮するフォルダーを含むディレクトリから管理者として実行する必要があります。

お役に立てれば。


0

フォルダ構造を保持し、各ファイルを独自の構造で保存する必要がある場合は、次を試してください。

このコマンドを拡張子.batのファイルに保存し、zip圧縮する必要があるフォルダーに配置します。

FOR /R %%i IN (*.*) DO "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -sdel

注意:

-sdel:元のファイルを削除します(オプション、圧縮ファイルのみを保持する場合)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.