私はさまざまなもののバックアップの多くのZipファイルを含むハードドライブを持っています。それらは、さまざまな時点でさまざまな一貫性のない方法で圧縮されており、それらの多くは最小限の圧縮設定を使用しています。
同じ(最良の)圧縮設定を使用してドライブ上のすべてのZIPを再圧縮する方法(できれば7Zipを使用)はありますか?
以下は、100%成功した同様のタスクに過去に使用したスクリプトで、ドライブ文字またはフォルダーにすることができるソースディレクトリを明示的に指定できる 7Zip の純粋なバッチです。
これにより、最初のルート一時ディレクトリを明示的に指定し、その中にZipファイルの名前からZip拡張子を引いたものに一致する新しいフォルダを作成し、 7Zip アーカイブ操作が完了したらそれを削除することもできます。 Zipファイルごとに For/F ループが繰り返されて処理されます。
Src=
、ExtractDir=
、およびz7=
変数の値を、スクリプトの先頭で環境に必要な値に設定するだけです。残りはうまくいくでしょう。
必要なものは何でも指定できます 7Zip圧縮方法%z7% a ~
のように-aoa
スイッチの直後の-aoa -m<method_parameters>
コマンドの最後に必要なものあなたの要望。
ただし、バッチスクリプトとして実行するには、ロジックをデスクトップ上のテキストドキュメントなどにテキストドキュメントから<something>.cmd
として保存しますファイル| saveオプション。保存したら、それをダブルクリックしてロジックを実行し(または、管理者として実行を右クリックして)、ファイルが期待どおりに操作されたことを確認します。
@ECHO ON
SET Src=X:\
SET ExtractDir=%Src%\tmpExtract007
SET z7="C:\Program Files\7-Zip\7z.exe"
FOR /F "usebackq tokens=*" %%a IN (`DIR /S /B /A-D "%Src%\*.Zip"`) DO (
IF NOT EXIST "%ExtractDir%\%%~Na" MD "%ExtractDir%\%%~Na"
ECHO A | %z7% e "%%~Fa" -o"%ExtractDir%\%%~Na" -r
%z7% a "%%~Fa" "%ExtractDir%\%%~Na\*" -aoa
RD /Q /S "%ExtractDir%\%%~Na"
)
PAUSE
EXIT
ECHO A |
コマンドの前にある%z7% e ~
は、出力ディレクトリに存在する既存のファイルを上書きするように指示するのを待つのではなく、上書きするように指示することに注意してください。
また、-aoa
コマンドの最後にある%z7% a ~
スイッチを使用すると、zipファイル内の既存のファイルをすべて上書きして、実際に削除せずに元のファイルをすべて置き換えるように指示されることに注意してください。 IF EXIST "%%~Fa" DEL /Q /F "%%~Fa"
を1行追加する必要がある場合は、このスクリプトに追加するのが非常に簡単な、元のZipファイル全体を事前に作成してください。
これを実行できる通常のコマンドプロンプト(cmd.exe
)の簡単なスクリプトを次に示します。
set Zip7="C:\Program Files\7-Zip\7z.exe"
for %z in (*.Zip) do (
mkdir tmp
cd tmp
%Zip7% x ..\%z
%Zip7% a ..\%z.7z -r -mx9 *
cd ..
rmdir /s /q tmp
)
まず、Zip7
変数が7z.exe
へのパスで定義されます。次に for
現在のディレクトリ内のすべてのZipファイルを繰り返し処理します。各Zipファイルはtmp
ディレクトリに抽出され、最大圧縮(-mx9
オプション)を使用して7-Zipで再圧縮されます。
これらのコマンドをバッチファイルに入れることができます。この場合、for
- loop変数でdouble%
を使用します。つまり、%%z
の代わりに%z
を使用します。
ReZipフリーウェアがその仕事をします: zipada55-bin-win32.Zip 。まず、rezip -comp -int archive.Zip
コマンドは、それ以上インストールしなくても公正な仕事をします。さらに優れた圧縮を行うには、Zip、7z、kzip、advzipをダウンロードし、-int
オプションなしでReZipを実行する必要があります。コマンドラインオプションのフルセットは次のとおりです。
Options: -defl : repack archive only with the Deflate
subformat (most compatible)
-fast_dec : repack archive only with fast decompressing subformats
-int : use internal Zip-Ada algorithms only, no external call
-touch : set time stamps to now
-lower : set full file names to lower case
-del_comm : delete comment
-comp : compare original and repacked archives (paranoid mode)
-rs=n : loop many times over a single compression approach
having randomization, and keep optimum when size is
stable after n attempts in a row
ハードドライブ上のすべてのZipファイルを検索するPowerShellスクリプトを作成し、見つかったZipアーカイブごとに、すべてのファイルを抽出して、目的の形式で再度圧縮します。
組み込みのZip関数を使用するか、PowerShellから7Zipコマンドラインツールを呼び出すことができます。