回答:
グラフィカルユーザーインターフェイスを使用して提案されていることを実行できるかどうかはわかりませんが、コマンドラインからは確実に実行できます。
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"
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 }
これには、次のファイルのみが含まれます。
編集 7-zipファイルではなくzipファイルが必要な場合は、代わりにInfoZipのzip.exeを使用します。
7z a -tzip archive.zip *.exe
Total Commander用の7zipプラグインをhttp://www.ghisler.com/plugins.htmからダウンロードしてインストールできます 。スクリーンショットのウィンドウの右側でこれを行うと、7zip圧縮用の別の選択項目が表示されます。そのオプションを使用すると、求めていることを正確に達成できます。
私はちょうど「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」などのバッチファイルにコピーし、圧縮するフォルダーを含むディレクトリから管理者として実行する必要があります。
お役に立てれば。