Windows 7 で 7-Zip を使用してサブフォルダ内のすべての ZIP ファイルを抽出する方法

Windows 7 で 7-Zip を使用してサブフォルダ内のすべての ZIP ファイルを抽出する方法

私は多くのファイルを含む大きなWindows 7のフォルダツリー構造を持っていますジップファイル。これらは単層の ZIP ファイルです (ZIP 内の ZIP ではありません)。このフォルダー構造を解析し、ファイル拡張子で各 ZIP ファイルを検索し (例を参照)、同じ場所に解凍 (ZIP ファイルは削除し、解凍されたファイルは残す) するには、どの 7-Zip コマンドを使用すればよいですか?

例: フォルダー階層内のすべてのファイルの名前は、abc.mp3.zip または xyz.jpg.zip のようになります。これは、ネイティブ ファイル拡張子の後に「.zip」が続く名前です。7-Zip で、ワイルドカード (*.mp3.zip、*.jpg.zip など) を使用してツリー内のすべてのファイルをファイル拡張子で検索し、新しいフォルダーを作成せずに現在の場所に抽出して、結果が abc.mp3 と xyz.jpg になるようにします。

答え1

私の知る限り、7-zip にはあなたが探している機能を実行するコマンドはありません。ここに、あなたが望む機能を実行すると思われる Windows バッチ ファイル スクリプトがあります。これはコマンド ラインから実行して、処理するフォルダー ツリーのルートへのパスを指定する必要があります。

ファイルunzipper.bat

@echo off
setlocal
if "%1"=="" goto Usage

call :Get7zCmd
:: Recurse folder passed in as paramater
for /r %1 %%Z in (*.zip) do (
    echo ====
    rem Change to the directory of zip file
    cd /d "%%~dpZ"
    rem Extract all files to current directory
    echo %_7zCmd% e "%%~nxZ" -y
    rem Delete the zip file
    echo del "%%~nxZ"
)
goto End

:Usage
echo.
echo Parses through folder structure starting at the specified path, finding
echo and extracting the contents of all zip files found, and then deletes
echo the zip file.
echo.
echo Usage:
echo     %~n0 root-directory-path
echo.
echo     For example:
echo.
echo %~n0 "D:\some folder"

:End
goto :EOF

:: ==========================
:: Subroutine Get7zCmd
:: Determines the full path to 7-zip command-line executable from the Windows
:: Registry and sets the variable "_7zCmd" to the result.
:Get7zCmd
set Reg.Key=HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\7zFM.exe
set Reg.Val=Path
for /F "Tokens=2*" %%A in ('Reg Query "%Reg.Key%" /v "%Reg.Val%" ^| find /I "%Reg.Val%"') do call set PathDirectory=%%B
set _7zCmd="%PathDirectory%%\7z.exe"
exit /b 0

全体として、このスクリプトは大量のファイルを抽出し、その後に多くの zip ファイルを削除する可能性があるため、かなり過激で潜在的に破壊的な動作をするため、それらの動作を行う 12 行目と 14 行目のコマンドに をプレフィックスとして付けて無効にしましたecho。これにより、 がなかった場合に実行される動作が出力されるだけですecho。こうすることで、予期しない問題が発生した場合にファイル システムに損傷を与えることなく、最初にスクリプトをテストできます。

スクリプトを変更して実際にこれらのアクションを実行するには、2 行のそれぞれから を削除する必要がありますecho。もちろん、いかなる責任についても標準の免責事項が適用されます。

関連情報