7z - サブディレクトリ内のファイルを圧縮し、親フォルダの名前を付けます

7z - サブディレクトリ内のファイルを圧縮し、親フォルダの名前を付けます

次のようなフォルダ構造を圧縮しようとしています:

Root
 |_ Folder
      |_Sub Folder 1
          |_Files
      |_Sub Folder 2
          |_Files
      |_ *more Sub Folders*

サブフォルダーごとに、サブフォルダー内のファイルを含む .zip ファイルを作成し、サブフォルダーに名前を付ける必要があります。したがって、「フォルダー」内でコマンドを実行すると、サブフォルダーごとに名前が付けられた zip ファイルが作成され、サブフォルダーの内容のみが含まれます (サブフォルダーが単に圧縮されたものではありません)。

Windows で 7-zip を使用してさまざまな for コマンドを試しましたが、うまくいかないようです。

for /d %i in (*) do 7z a -oC:\Temp... %i.zip

これは、フォルダーの内容全体を圧縮し、サブフォルダー名ごとにアーカイブを作成するループを実行します。

ご協力いただければ幸いです。

答え1

最も簡単な方法は、TotalCommander (ghisler のサイトから) をインストールし、必要なサブディレクトリを選択することです (数字キーボードの * を使用するとすべてを切り替えることができます)。コンプレッサーへのショートカットは Alt-F5 です。「選択したファイル/ディレクトリごとに 1 つずつ個別のアーカイブを作成する」をチェックし、必要なコンプレッサーを選択して OK します。

バッチでは以下を使用できます:

@echo off
for /d %%i in (*) do (
    echo Compressing %%i
  7z a "C:\TEMP\%%i.7z" -r "%%i\*.*"
)

または、CMD 行で:

for /d %i in (*) do  7z a "C:\TEMP\%i.7z" -r "%i\*.*"

答え2

Powershell を使用することもできます:

Get-ChildItem -Path "C:\Root\Folder" -Force -Directory -ErrorAction Continue | foreach {Start-Process "C:\Program Files\7-Zip\7z.exe" -ArgumentList "a C:\TEMP\$_.7z -r $($_.FullName)\*.*"}

関連情報