7zipはアーカイブを展開した後に空のディレクトリを削除できますか?


1

特定の場所に抽出したいいくつかのファイル/フォルダーを含む7zipアーカイブがあります。この例を単純化して、最小限、完全、検証可能にしました。

-ディレクトリ構造を維持したくないので、eコマンドを使用しています。(すべてのディレクトリ内の)すべてのファイルを1つの場所に移動するだけです。

-特定の出力ディレクトリがあるため、を使用してい-oます。

制限は、元のアーカイブを変更できないことです(別のチームが関与するため、変更しないことを希望します)。理想的には、アーカイブを解凍した後に削除するためにディレクトリをハードコードする必要はありません。

問題はすべてが抽出された後に発生します。出力ディレクトリに空のフォルダーが残っています。7zipがこれらの空のディレクトリを削除するか、そもそも作成しないようにする方法はありますか?

私の7zipコマンドラインは次のようになります:

D:\7z.exe e D:\MyArchive.zip -oD:\ExtractToHere

サンプルの.zipファイルは、次のような構造になります。

./A/1.txt
./B/2.txt
./C/3.txt
./D/fileWithNoExt

出力ディレクトリに必要なものは次のとおりです(他には何もありません)。

./1.txt
./2.txt
./3.txt
./fileWithNoExt

私は私の出力ディレクトリを持っていることである(AB、およびCすべての空のディレクトリです):

./1.txt
./2.txt
./3.txt
./fileWithNoExt
./A/
./B/
./C/
./D/

@LMFAO_A_JOKEロジックは理にかなっています-私がここで本当に探しているのは、7zipでこれを行う方法でした。それはまだ価値を追加するので、私は答えを続けます。乾杯。
PerryC

回答:


1

私が考えることができる唯一の方法があり、それは落とし穴があります

現在のコマンドですが、次のものが含まれます。

D:\7z.exe e D:\MyArchive.zip -oD:\ExtractToHere *.* -r

しかし、これに関する問題は

  1. 拡張子のないファイルは抽出されません
  2. のディレクトリ。それらの途中でまだ抽出されます

上記の構造例では、意図したとおりに機能するはずですが、実際の要件はわかりません。特にフォルダを除外する方法があるとは思わない。


私は、私たちが得ようとしているのと同じくらい近い感じがします。*.*単なるプレーンに置き換えることはできず*、ファイルにのみ適用することはできません。
PerryC

@PerryC確かに-何らかの方法でディレクトリの属性を取得せずに差別化を行うことはできないと思います。かなりイライラしますが、私は同意します。Linux / Macの設定では、このソリューションは解決するよりも多くの問題をもたらしますが、Windows環境内に保持すれば、かなり信頼できるでしょう。それでも、別のユーティリティまたはスクリプトを使用して2回目のスイープを実行してから、「整理​​整頓」する方が安全だと思います。
on野

1

7zipはアーカイブを展開した後に空のディレクトリを削除できますか?

理想的には、アーカイブを解凍した後に削除するためにディレクトリをハードコードする必要はありません。

出力ディレクトリに空のフォルダーがいくつか残っています。7zipがこれらの空のディレクトリを削除するか、そもそも作成しないようにする方法はありますか?

現在実行中の7Zipコマンドを使用して、抽出ディレクトリの下の空のディレクトリを削除するために、以下のロジックが期待どおりに動作することをテストして確認しました。

ソースファイルを設定して場所を抽出し、それをコマンドプロンプトにコピーアンドペーストして、説明したとおりに行う必要があります。

  • 抽出ディレクトリとzipファイル名をハードコーディングして抽出することに関して、あなたがどのような懸念を抱いているのかわかりませんが、あなたの例は、あなたがこれをしていることを示しています。したがって、この下のメソッドには、例に示すようにそれ以上の労力は含まれません。

さらに、この方法を使用すると、7Zipコマンドを現在使用しているままにすることができます。

以下のこの自信に満ちた作業例は、必要に応じて、特定のフォルダー内のすべてのzipファイルをループするようにさらに展開できます。これも同様に、私に知らせてください。


作業コマンドプロンプトロジックの例

@ECHO ON
SET SourceFile=D:\MyArchive.zip
SET ExtractDir=D:\ExtractToHere

D:\7z.exe e %SourceFile% -o%ExtractDir%

FOR /F "TOKENS=*" %A IN ('"DIR /S /B /AD "%ExtractDir%""') DO RD "%~A"

さらなるリソースと読書


0

解凍後に別のコマンドを実行できる場合は、robocopyを使用して空のフォルダーを削除できます。

 ROBOCOPY folderName folderName /S /MOVE

ソース:https : //stackoverflow.com/questions/7831286/how-to-delete-empty-folders-using-windows-command-prompt


空のフォルダを削除する良い方法はたくさんあると確信ROBOCOPYしていますが、そもそもこの問題が発生しないように7zipの方法を探しています。
PerryC

0

2パスアプローチが実行可能な場合、コンテンツを7z lでリストし、空のディレクトリを解析できます。そこから、どちらがより効率的になるかに応じて、-i必要なものを含めるか、-x使用しないものを除外することができます。


それは私が望んでいない合併症の層を追加します。この例のIRLは、MSBuildを介して実行される.projファイルで使用されています。現在、抽出、移動操作、および削除が行われています。単純に複雑さを軽減できるかどうかを確認しようとしています。
PerryC
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.