これはTotal Commanderの内部Zipパッカーです。
しかし、7Zipパッカーを使いたいのですが。 5つのファイルを選択すると、選択したファイルごとに5つの個別の.Zipアーカイブが取得されます。 7zipでそれを行うにはどうすればよいですか?
グラフィカルユーザーインターフェイスを使用して、提案されていることを実行できるかどうかはわかりませんが、コマンドラインから実行できます。
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=?
は、?
-ファイル名とディレクトリ内の不正な文字でトークンを分解したいことをFORに通知します。トークンが1つだけ必要です。DIR
の/B
はbare formatのためのもので、名前だけですDIR
の/A:D
は属性によって結果を制限するためのもので、Dはディレクトリのためのものですこれをバッチファイル内にカプセル化する場合、必要な変更は、%i変数をダブルエスケープすることだけです。
FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"
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 }
これには、次のファイルのみが含まれます。
[〜#〜] edit [〜#〜]7-ZipファイルではなくZipファイルが必要な場合は、 InfoZipのZip.exeを使用します。 代わりに。
私はちょうどこの問題に取り組んでおり、見つかった問題の1つはアーカイブ内のフォルダー名の重複でした。つまり、「foo」というフォルダーを圧縮すると、1つだけではなく.\foo\fighters.txt
を含むアーカイブが生成されますfighters.txt
を含みます。
したがって、答えは、処理中のディレクトリに移動して、アーカイブを前の(ルート)ディレクトリに表示し、次のフォルダを処理するためにそのディレクトリに戻ることです。
また、7Zipがルートディレクトリ内の既存のZipファイルとCMDファイルを無視してアーカイブ内で終了しないようにすることも重要です。したがって、-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」などのバッチファイルにコピーし、圧縮するフォルダーを含むディレクトリから管理者として実行する必要があります。
お役に立てれば。
フォルダ構造を維持し、各ファイルを独自の構造で保存する必要がある場合は、次のことを試してください。
このコマンドを拡張子.batのファイルに保存し、Zipに必要なフォルダーに配置します。
FOR /R %%i IN (*.*) DO "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -sdel
注意:
-sdel:元のファイルを削除します(圧縮ファイルのみを保持する場合はオプション)
Total Commanderの7Zipプラグインは http://www.ghisler.com/plugins.htm からダウンロードしてインストールできます。これを行うと、スクリーンショットからウィンドウの右側に別の選択肢が表示されます。 7Zip圧縮用。このオプションを使用すると、求めていることを正確に実行できます。